None是單例對象,所有None的內存地址都相同,所以用is判斷是可以的。
如果用==
判斷則可能有問題,因為==
調用的__eq__()
方法可能被重載,導致結果不符合預期:
class ReloadEq():
def __eq__(self, second_value):
return True
req = ReloadEq()
print(req == None)
輸出:
True
除此之外,is的時間效率也比==更高:
import timeit
print(timeit.timeit('None is None',number=10**7))
print(timeit.timeit('None == None',number=10**7))
輸出:
0.1993637309933547
0.2477139010006795
因為is只需要比較地址是否相同,而==需要比較值,而且可能涉及列表等需要遍歷的對象,需要比較每一個元素。
參考鏈接:https://blog.csdn.net/qq_34152244/article/details/100639985