4

タイプの比較は推奨されないことは知っていますが、ifelifシリーズでこれを行うコードがいくつかあります。ただし、None値がどのように機能するかについては混乱しています。

def foo(object)
    otype = type(object)
    #if otype is None: # this doesn't work
    if object is None: # this works fine
        print("yep")
    elif otype is int:
    elif ...

どうして私はとなどとうまく比較できますが、とは比較できis intませんis Noneか?types.NoneTypeはPython3.2でなくなったようですので、使用できません...

以下

i = 1
print(i)
print(type(i))
print(i is None)
print(type(i) is int)

プリント

1
<class 'int'>
False
True

一方

i = None
print(i)
print(type(i))
print(i is None)
print(type(i) is None)

プリント

None
<class 'NoneType'>
True
False

Noneは特別だと思いますが、何が得られますか?実際に存在しますかNoneType、それともPythonは私に嘘をついていますか?

4

2 に答える 2

9

NonePythonが提供する特殊なケースのシングルトンです。 NoneTypeシングルトンオブジェクトのタイプです。 type(i) is NoneですがFalsetype(i) is type(None)真である必要があります。

于 2012-11-05T19:12:42.817 に答える
6

はシングルトンNoneTypeであるため、と比較する必要はありません。である可能性Noneのあるオブジェクトがある場合は、またはです。objNoneobj is Noneobj is not None

比較が機能しない理由Noneは、タイプではなく、値であるためです。type(1) is 1これは、整数の例で試すのと似ています。NoneType本当にチェックしたい場合は、を使用するtype(obj) is type(None)か、さらに良い方法を使用できますisinstance(obj, type(None))

于 2012-11-05T19:12:31.460 に答える