1. if not x 和 if x is None:
答:
在python中,None、False、空字符串‘’、0、空列表[]、空字典{}、空元组()都相当于False。所以,使用if not x,如果x是以上任何一个,均会返回True
2. == 和 is 的区别:
(a) 为什么有时候 a = 很小的整数(比如说100),b = 和a一样的数字的时候(100),使用 a is b 会返回True。但是,a = 1000,b = 1000, a is b 返回的则是False
(b) 为什么对于自定义类 class Person( ), a = Person(), b = Person(),使用 a == b的时候会返回False
答:
(a) is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。莱布尼茨说过:“世界上没有两片完全相同的叶子”,这个 is 正是这样的比较,比较是不是同一片叶子(即比较 id 是否相同,这 id 类似于人的身份证标识)。
(b) == 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就行。这里比较的并非是不是同一片叶子,可能叶子的种类或者脉络相同就可以了。默认会调用对象的 __eq__() 方法。
(c) python中的小数据池将[-5, 256]内的整数存在了内存的堆(内存中有两块:堆栈和堆)当中,所以在程序当中调用这个区间的整数时,不会再占用新的内存。
(d) 对于自定义 class 来说,== 判断的是两个class的地址,如果想要解决这个问题,需要自己在 class 中定义 __eq__ 函数
注:在 .py 的文件中,a = 1000,b = 1000, a is b 返回的是True,原因不太清楚。(总之,建议慎用 is)