use*_*318 23 python comparison operators python-2.x
为什么在Python 2 中4 < '3'返回True?
是因为当我在一个数字周围放置单引号时,Python认为它是一个字符串,字符串比数字大吗?
agf*_*agf 31
是的,任何数字都将小于Python 2中的任何字符串(包括空字符串).
在Python 3中,您无法进行任意比较.你会得到一个TypeError.
来自 eryksun评论中的链接:
if (PyNumber_Check(v))
vname = "";
else
vname = v->ob_type->tp_name;
if (PyNumber_Check(w))
wname = "";
else
wname = w->ob_type->tp_name;
c = strcmp(vname, wname);
Run Code Online (Sandbox Code Playgroud)
因此,至少在最近的CPython 2.x版本中,比较类型名称,使用空字符串而不是任何数字类型的类型名称.
除数字外的不同类型的对象按其类型名称排序; 不支持正确比较的相同类型的对象按其地址排序.
当您订购两个字符串或两个数字类型时,排序以预期的方式完成(字符串的字典顺序,整数的数字排序).
订购字符串和整数时,会对类型名称进行排序."str"在"int","float","long","list","bool"等之后按字典顺序排列.但是元组的排序高于字符串,因为"tuple">"str":
0 > 'hi'
False
[1, 2] > 'hi'
False
(1, 2) > 'hi'
True
Run Code Online (Sandbox Code Playgroud)
另请参阅比较使用 docs.python.org中的词典排序
在Python 3.x中,行为已更改,因此尝试排序整数和字符串将引发错误:
>>> '10' > 5
Traceback (most recent call last):
File "", line 1, in
'10' > 5
TypeError: unorderable types: str() > int()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3155 次 |
| 最近记录: |