以下代码段使用输出进行注释(如ideone.com上所示):
print "100" < "2" # True
print "5" > "9" # False
print "100" < 2 # False
print 100 < "2" # True
print 5 > "9" # False
print "5" > 9 # True
print [] > float('inf') # True
print () > [] # True
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么输出是这样的?
我遇到了一些代码类似的代码
x[x<2]=0
Run Code Online (Sandbox Code Playgroud)
玩弄各种变化,我仍然坚持这种语法的作用.
例子:
>>> x = [1,2,3,4,5]
>>> x[x<2]
1
>>> x[x<3]
1
>>> x[x>2]
2
>>> x[x<2]=0
>>> x
[0, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud) 为什么在Python 2 中4 < '3'返回True?
是因为当我在一个数字周围放置单引号时,Python认为它是一个字符串,字符串比数字大吗?
抛出这个问题(在Python 2.7.5中)有一点错字:
def foo(): return 3
if foo > 8:
launch_the_nukes()
Run Code Online (Sandbox Code Playgroud)
当它,我不小心爆炸了月亮.
我的理解是,E > F相当于(E).__gt__(F)和表现良好的类(如内置)相当于(F).__lt__(E).
如果没有__lt__或__gt__运营商那么我认为Python使用__cmp__.
但是,这些方法都与工作function对象,而<与>运营商做的工作.引擎盖下发生了什么?
>>> foo > 9e9
True
>>> (foo).__gt__(9e9)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute '__gt__'
>>> (9e9).__lt__(foo)
NotImplemented
Run Code Online (Sandbox Code Playgroud) 我最近在我的程序中发现了一个拼写错误
while len(first_list) > second_list:
do_stuff
Run Code Online (Sandbox Code Playgroud)
我打得四处这一点,并发现5 < ["apple"] == True和5 > ["apple"] == False
为什么Python允许这些类型的比较?什么是在引擎盖下评估,以确定5是否小于["apple"]?
这在某种程度上与我的问题有关为什么在Python中''> 0 True?
在Python 2.6.4中:
>> Decimal('0') > 9999.0
True
Run Code Online (Sandbox Code Playgroud)
从我对原始问题的回答中我了解到,在Python 2.x中比较不同类型的对象时,类型按其名称排序.但在这种情况下:
>> type(Decimal('0')).__name__ > type(9999.0).__name__
False
Run Code Online (Sandbox Code Playgroud)
那为什么Decimal('0') > 9999.0 == True呢?
更新:我通常在Ubuntu上工作(Linux 2.6.31-20-generic#57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686 GNU/Linux,Python 2.6.4(r264:75706,2009年12月7日,18 :45:15)[关于linux2的[GCC 4.4.1]).在Windows上(winX上的WinXP Professional SP3,Python 2.6.4(r264:75706,2009年11月3日,13:23:17)[MSC v.1500 32位(英特尔)]我的原始语句的工作方式不同:
>> Decimal('0') > 9999.0
False
Run Code Online (Sandbox Code Playgroud)
我现在更加困惑.% - (
来自Python文档:http://docs.python.org/library/stdtypes.html#comparisons
实施说明:除数字外的不同类型的对象按其类型名称排序; 不支持正确比较的相同类型的对象按其地址排序.
有没有理由选择这样做而不是提出例外?
出于某种原因,在Python 2.7的形式表达tuple > list的回报True,但tuple < list和tuple == list回报False.这是为什么?
无论如何,这种观察对我来说并不是原创.