13

「max」関数は None タイプでうまくいくことに気付きました:

In [1]: max(None, 1)
Out[1]: 1

「min」関数は何も返しません:

In [2]: min(None, 1)
In [3]: 

min(None, 1) の定義がないからでしょうか?では、なぜ最大の場合、数値を返すのでしょうか? None は「-infinity」のように扱われますか?

4

3 に答える 3

11

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 > NonePython 3 では、および を介して行われる比較のような無意味な比較に対して例外が発生しmax(1, None)ます。


-infinity が必要な場合、Python は を提供しますfloat('-inf')

于 2013-03-20T12:40:24.960 に答える
7

何かを返しますが、Pythonシェルは印刷しませんNone

>>> min(None, 1)
>>> print min(None, 1)
None
于 2013-03-20T12:29:16.103 に答える
-1

他のどの値よりも常に少ない値が本当に必要な場合は、小さなクラスを作成する必要があります。

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
于 2013-03-20T13:30:25.100 に答える