# Python中is和==的区别
is当比较的是相同的对象实例时总是返回True。而==则完全决定于__eq__()方法的实现。
>>> class foo(object):
def __eq__(self, other):
return True
>>> f = foo()
>>> f == None
True
>>> f is None
False
# "if x is not None" 和 "if not x is None" 有什么区别?
if x 会对x做 nonzero 判断,当 x 为 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组() 的时候都是 False。
因此在使用列表的时候,如果你想区分x==[]和x==None两种情况的话, 此时if not x:
将会出现问题.
当你确实要判断一个变量不是 None 的时候,对于if x is not None
和if not x is None
写法,很明显前者更清晰,,不会出现错误, 而后者有可能使读者误解为if (not x) is None
,因此推荐前者,同时这也是谷歌推荐的风格.
使用if not x这种写法的前提是:必须清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。
参考地址: