我注意到,虽然“最大”功能上无类型做好:的Python分钟的无类型/最大
In [1]: max(None, 1)
Out[1]: 1
“分钟”功能不返回任何内容:
In [2]: min(None, 1)
In [3]:
也许这是因为min(没有,1)没有定义? 那么为什么在最大的情况下,它返回数字? 是没有对待'-infinity'?
我注意到,虽然“最大”功能上无类型做好:的Python分钟的无类型/最大
In [1]: max(None, 1)
Out[1]: 1
“分钟”功能不返回任何内容:
In [2]: min(None, 1)
In [3]:
也许这是因为min(没有,1)没有定义? 那么为什么在最大的情况下,它返回数字? 是没有对待'-infinity'?
由于jamylak写,None
根本就没有被Python炮弹打印。
这是方便,因为所有函数返回的东西:没有指定值时,他们返回None
:
>>> def f():
... print "Hello"
...
>>> f()
Hello
>>> print f() # f() returns None!
Hello
None
这就是为什么Python的弹不打印返回无值。但是,print None
是不同的,因为它明确要求Python打印None
值。
至于比较,None
是不认为是负无穷。
Python 2的general rule是,无法以任何有意义的方式进行比较的对象在比较时不会引发异常,而是返回一些任意的结果。在CPython中,任意规则如下:
除数字以外的其他类型的对象按其类型 名称排序;不支持正确比较的相同类型的对象按照其地址排序。
Python 3中引发一个例外,对于像1 > None
非有意义的比较,并通过max(1, None)
所做的比较。
如果您确实需要-infinity,Python会提供float('-inf')
。
它返回的东西,蟒蛇外壳只是不打印None
>>> min(None, 1)
>>> print min(None, 1)
None
如果你真的想要的值总是会比较少比其他任何,你需要创建一个小类:
class ValueLessThanAllOtherValues(object):
def __cmp__(self, other):
return -1
# really only need one of these
ValueLessThanAllOtherValues.instance = ValueLessThanAllOtherValues()
这个类会比较反对任何其他类型的值:
tiny = ValueLessThanAllOtherValues.instance
for v in (-100,100,0,"xyzzy",None):
print v
print v > tiny
print tiny < v
# use builtins
print min(tiny,v)
print max(tiny,v)
# does order matter?
print min(v,tiny)
print max(v,tiny)
print
打印:
-100
True
True
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
-100
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
-100
100
True
True
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
100
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
100
0
True
True
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
0
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
0
xyzzy
True
True
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
xyzzy
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
xyzzy
None
True
True
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
None
<__main__.ValueLessThanAllOtherValues object at 0x2247b10>
None
微小的比自己还少!
print tiny < tiny
True
那么,为什么max(None,1)返回1呢?它是任意的? – mclafee 2013-03-20 12:47:01
请注意,此规则仅适用于Python 2.在Python 3中,它是固定的,并且您会得到一个有意义的错误消息'unorderable types:int()
jamylak
2013-03-20 12:57:38
@mclafee:'max(None,1)'确实没有定义。我引用的CPython 2的“按类型命名的顺序”规则似乎不适用于整数和None之间的比较,因为“None”的类型是'NoneType',后面是'int' '。也许第二条规则适用,尽管(在一个测试中,我做了'id(1)> id(None)'为'True')。 – EOL 2013-03-20 12:59:55