相关疑难解决方法(0)

38
推荐指数
2
解决办法
2990
查看次数

python如何比较函数?

为什么不上升属性错误?函数对象没有任何比较方法.它以某种方式使用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 sorting

26
推荐指数
2
解决办法
1万
查看次数

在Python 2.x中,为什么函数和int之间支持>运算符?

在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定义+运算符,但<运算符是?

python int function operators python-2.x

5
推荐指数
1
解决办法
543
查看次数

Python中的奇怪比较

我在鬼混,偶然发现了一些我不理解的事情......

问题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 comparison-operators

3
推荐指数
1
解决办法
238
查看次数

Python将int,float等与列表进行比较

所以这一直困扰着我,我无法在网上找到任何关于它的信息.有人可以在python中解释这个行为吗?为什么它返回True而不是抛出异常?谢谢

In [1]: 1 < [1, 2, 3]
Out[1]: True
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
629
查看次数

为什么0 <()在Python中评估为True?

我无意中输入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,tupledict评估好像是否大于任何数字?


更新:

  • Viktor指出默认情况下会比较内存地址:

    >>> map(lambda _:(id(0),'<',id(_)),((),[],{}, set([])))

    [(31185488L, '<', 30769224L), (31185488L, '<', 277144584L), (31185488L, '<', 279477880L), (31185488L, '<', 278789256L)]

尽管看似顺序,但这是不正确的.


  • Martijn Pieters指出:

如果没有定义明确的比较运算符,Python 2将使用Numbers和Type-names进行比较,其中数字的优先级最低.

这并未暗示正在调用的内部方法.另见这个有用但不确定的SO线程:

在IPython 2.7.5 …

python collections comparison logic boolean

0
推荐指数
1
解决办法
265
查看次数