为什么不上升属性错误?函数对象没有任何比较方法.它以某种方式使用id()吗?
fun1 = lambda:x
fun2 = lambda:x
print fun1 == fun1 # True
print fun1 == fun2 # False
print fun1 > fun2 # True
print fun1 < fun2 # False
print fun1 > 1 # True
Run Code Online (Sandbox Code Playgroud)
我知道它比较了地址,但是怎么样?拦截__lt __,__ eq__等是否是一些低级别的黑客攻击?
在Python 2.x中,以下代码产生错误,如预期的那样:
>>> def a(x): return x+3
...
>>> a+4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'function' and 'int'
Run Code Online (Sandbox Code Playgroud)
但是,允许以下内容:
>>> a < 4
False
Run Code Online (Sandbox Code Playgroud)
为什么没有为function和int定义+运算符,但<运算符是?
我在鬼混,偶然发现了一些我不理解的事情......
问题1:
a = [1,2,3]
b = [1,2,3,4]
len(a) < b
Run Code Online (Sandbox Code Playgroud)
结果是True,但这实际上是在比较两个列表的长度吗?似乎是因为这也是真的......
a = [15,32,7]
len(a) < b
Run Code Online (Sandbox Code Playgroud)
问题2:
当我们尝试将整数与列表进行比较时会发生什么?为什么这些都是真的(我假设有一般性解释......)......
3 < b
20 < b
float('inf') < b
None < b
(lambda x: (x**x)**x) < b
Run Code Online (Sandbox Code Playgroud)
......这些都是假的?
'poo' < b
'0' < b
Run Code Online (Sandbox Code Playgroud) 所以这一直困扰着我,我无法在网上找到任何关于它的信息.有人可以在python中解释这个行为吗?为什么它返回True而不是抛出异常?谢谢
In [1]: 1 < [1, 2, 3]
Out[1]: True
Run Code Online (Sandbox Code Playgroud) 我无意中输入time.clock<()了Python 2.7解释器响应:True.以下代码举例说明了该行为:
>>> repr(time.clock)
'<built-in function clock>'
>>> time.clock<()
True
Run Code Online (Sandbox Code Playgroud)
此外:
>>> import sys
>>> sys.maxint < ()
True
>>> map(lambda _:0<_,((),[],{}))
[True, True, True]
Run Code Online (Sandbox Code Playgroud)
相反:
>>> 1<set(())
TypeError: can only compare to a set
Run Code Online (Sandbox Code Playgroud)
问题:除了为什么,是否存在空洞的实际意义或目的list,tuple或dict评估好像是否大于任何数字?
更新:
Viktor指出默认情况下会比较内存地址:
>>> map(lambda _:(id(0),'<',id(_)),((),[],{}, set([])))
[(31185488L, '<', 30769224L), (31185488L, '<', 277144584L), (31185488L, '<',
279477880L), (31185488L, '<', 278789256L)]
尽管看似顺序,但这是不正确的.
如果没有定义明确的比较运算符,Python 2将使用Numbers和Type-names进行比较,其中数字的优先级最低.
这并未暗示正在调用的内部方法.另见这个有用但不确定的SO线程:
在IPython 2.7.5 …
python ×6
logic ×2
operators ×2
python-2.x ×2
boolean ×1
collections ×1
comparison ×1
function ×1
int ×1
sorting ×1