我注意到虽然“max”函数在 None 类型上表现良好:
In [1]: max(None, 1)
Out[1]: 1
'min' 函数不返回任何内容:
In [2]: min(None, 1)
In [3]:
也许是因为 min(None, 1) 没有定义?那么为什么在最大情况下,它返回数字?None 是否被视为'-infinity'?
我注意到虽然“max”函数在 None 类型上表现良好:
In [1]: max(None, 1)
Out[1]: 1
'min' 函数不返回任何内容:
In [2]: min(None, 1)
In [3]:
也许是因为 min(None, 1) 没有定义?那么为什么在最大情况下,它返回数字?None 是否被视为'-infinity'?
正如 jamylak 所写,None
Python shell 根本不会打印。
这很方便,因为所有函数都返回一些东西:当没有指定值时,它们返回None
:
>>> def f():
... print "Hello"
...
>>> f()
Hello
>>> print f() # f() returns None!
Hello
None
这就是 Python shell 不打印返回的None 值的原因。print None
但不同的是,它明确要求 Python 打印该None
值。
至于比较,None
不认为是-infinity。
Python 2的一般规则是,无法以任何有意义的方式比较的对象在比较时不会引发异常,而是返回一些任意结果。对于 CPython,任意规则如下:
除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。
Python 3 引发了一个例外,用于无意义的比较1 > None
,例如通过max(1, None)
.
如果确实需要 -infinity,Python 提供float('-inf')
.
它确实返回了一些东西,python shell 只是不打印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
tiny 比它还小!
print(tiny < tiny)
True