Python min/max on None类型

mcl*_*fee 11 python min nonetype

我注意到虽然'max'函数在None类型上表现良好:

In [1]: max(None, 1)
Out[1]: 1
Run Code Online (Sandbox Code Playgroud)

'min'函数不返回任何内容:

In [2]: min(None, 1)
In [3]: 
Run Code Online (Sandbox Code Playgroud)

也许是因为min(None,1)没有定义?那么为什么在最大的情况下,它返回数字?没有人像'无限'一样对待?

Eri*_*got 10

正如jamylak所写,None根本不是由Python shell打印的.

这很方便,因为所有函数都返回一些东西:当没有指定值时,它们返回None:

>>> def f():
...     print "Hello"
...     
>>> f()
Hello
>>> print f()  # f() returns None!
Hello
None
Run Code Online (Sandbox Code Playgroud)

这就是Python shell不打印返回的 None值的原因.print None但是,它有所不同,因为它明确要求Python打印该None值.


至于比较,None被认为是负无穷.

Python 2 的一般规则是,无法以任何有意义的方式进行比较的对象在比较时不会引发异常,而是返回一些任意结果.在CPython的情况下,任意规则如下:

除数字外的不同类型的对象按其类型名称排序; 不支持正确比较的相同类型的对象按其地址排序.

Python 3引发了一个异常,用于无意义的比较,比如1 > None通过比较完成max(1, None).


如果你确实需要-infinity,Python会提供float('-inf').

  • 请注意,此规则仅适用于 Python 2。在 Python 3 中,它已修复,您会收到一条有意义的错误消息 `unorderable types: int() < NoneType()`。@mclafee 他们都返回了一个值,如果你读过 EOLs 的解释就很清楚了 (2认同)

jam*_*lak 7

它确实返回了一些内容,python shell只是不打印 None

>>> min(None, 1)
>>> print min(None, 1)
None
Run Code Online (Sandbox Code Playgroud)