usu*_* me 1 python equality operators python-2.7
所以下面的内置类有一个__eq__属性,(我假设)是你可以测试它们的实例是否相等的原因:
>>> 1.2.__eq__( 1.2 )
True
>>> 1.2 == 1.2
True
>>> 'hello'.__eq__( 'hi' )
False
>>> 'hello' == 'hi'
False
>>> [1,2].__eq__( [1,2] )
True
>>> [1,2] == [1,2]
True
Run Code Online (Sandbox Code Playgroud)
然后我很惊讶地看到int物体没有__eq__,但我们仍然可以比较它们:
>>> hasattr( 1, '__eq__' )
False
>>> 1 == 2
False
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?我是否误解__eq__了平等运算符之间的关系?
int对象有一个__cmp__方法:
如果没有定义丰富的比较(见上文),则通过比较操作调用.
其中丰富的比较包括__eq__.
演示:
>>> (1).__cmp__(2)
-1
>>> (1).__cmp__(1)
0
>>> (1).__cmp__(0)
1
Run Code Online (Sandbox Code Playgroud)
当__cmp__返回0这两个值是相等的.
Python 3取消了cmp()比较和相关的特殊方法; 在Python 3中int 确实有一个__eq__方法:
>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=4, micro=0, releaselevel='final', serial=0)
>>> (1).__eq__(1)
True
Run Code Online (Sandbox Code Playgroud)
此外,Python 3 int对象也提供了其他丰富的比较方法 ; __lt__,__le__,__ne__,__gt__,__ge__,所有的方法失踪了Python 2.0版本.
Python刚开始时只有 __cmp__丰富的比较支持只在Python 2.1中添加(参见PEP 207),并且整数在Python 3之前没有转换过.保持两个比较系统没有什么意义,因此表达不那么敏感形成.
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |