嗯......你能想到的任何全局對象爲在這個意義上是「獨一無二」的,它始終是同一個對象。
例如:
>>> x = file
>>> x is file
True
>>> x = True
>>> x is True
True
>>> x = ZeroDivisionError
>>> x is ZeroDivisionError
True
沒有什麼特別之處:
>>> x = None
>>> x is None
True
什麼你可能想知道就是爲什麼你應該測試x is None
而非x == None
。
答案是:x == None
會叫x.__eq__(None)
它可以在各種情況下返回True
其中x
實際上不是None
(雖然在現實中不是很常見)。
實例?
那麼,你可能會說有一個區別:None
是一個實例。
嗯,事實是,Python中的所有東西都是一個對象,這意味着一切都是一個實例。在我的例子,file
和ZeroDivisionError
是type
情況下,True
是bool
和None
實例的實例NoneType
(注意,type
是type
一個實例,因此沒有例外的規則)。
有一個關於一個特別的東西None
- 這是NoneType
唯一實例,你不能讓別人(除非有一些好的把戲嗎?)
但是,這實際上是NoneType
屬性 - 它不會讓你創造了新的實例:
TypeError: cannot create 'NoneType' instances
但是,這對於整個故事並不是必不可少的。
編輯這些「」唯一實例對象「被稱爲單例。當然,你可以製作一些你的。
如果測試x是()',如果x'將達到相同,則沒有任何意義。你爲什麼真的在問? –
「bool(x)'是'False'有很多可能的值。我需要檢查'x'是否實際上是'()',而不是其他的可能性之一,因爲你使用'x是None'的原因完全一樣。 –
如果x是一個元組,那麼'isinstance(x,tuple)'也會明確地允許你檢查x實際上是一個元組 –