「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 シェルによって印刷されません。
すべての関数が何かを返すので、これは便利です: 値が指定されていない場合、それらは次を返しNone
ます:
>>> def f():
... print "Hello"
...
>>> f()
Hello
>>> print f() # f() returns None!
Hello
None
これが、Python シェルが返されたNone 値を出力しない理由です。print None
ただし、None
値を出力するように明示的に Python に要求するため、異なります。
比較に関してNone
は、 -∞ とは見なされません。
Python 2の一般的なルールは、意味のある方法で比較できないオブジェクトは比較時に例外を発生させず、代わりに任意の結果を返すというものです。CPython の場合、任意のルールは次のとおりです。
数値以外の異なる型のオブジェクトは、型名の順に並べられます。適切な比較をサポートしない同じタイプのオブジェクトは、アドレス順に並べられます。
1 > None
Python 3 では、および を介して行われる比較のような無意味な比較に対して例外が発生しmax(1, None)
ます。
-infinity が必要な場合、Python は を提供しますfloat('-inf')
。
何かを返しますが、Pythonシェルは印刷しません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