Python编码风格篇:比较运算符

前几天有看到一篇 Flask 开发团队内部 Python 编码风格攻略 ,里边有一段关于比较的标准觉得很有意思:

恣意类型之间的比较,运用 == 和 !=
与单例(singletons)进行比较时,运用 is 和 is not
永久不要与 True 或 False 进行比较(例如,不要这样写:foo == False,而应该这样写:not foo)
自己在写代码的时分很少去重视变量的比较要怎样结束,根柢都是直接运用 == 。今日就借此机会聊聊 Python 中的比较运算符。

== 与 !=

== 和 != 是等值校验。

这两个运算符是咱们最了解不过的比较运算符了。== 会依据戏法办法 eq 检测左右两端政策的值是否持平。

例如 x == y ,其实不和的操作是 x.__eq__(y)。

Python编码风格篇:比较运算符
Python编码风格篇:比较运算符
is

is 是身份校验。它将检测左右两端是否为同一个政策。

同一个政策有必要满意:

  • 值相同
  • 内存地址相同

因而就不难理解为什么 is 和 is not 用于单例(singletons)比较了。

单例(singletons)是什么?

单例是一种规划方法,运用该方法的类只会生成一个实例

单例方法确保了在程序的不同方位都可以且仅可以取到同一个政策实例

假定实例不存在:会创立一个实例
假定实例已存在:会回来这个实例
not

not 是 Python 中的逻辑判别词,常用于布尔型 True 和 False。

not True -> False

not False -> True
逻辑判别

a = False

not a 为 True

if not a:

pass
判别元素是不是真的存在

a = 100

b = [1, 2, 3]

元素 a 是否不在列表 b 中

if a not in b:

pass
总结

仅对值进行简略比较时可以正常的运用 ==/!= 操作符:

a = 1

b = 2

if a == b:

pass

else:

pass
is 用于比较单例,例如比较 None:

if a is None:

pass

if a is not None:

pass
假定触及布尔值 True/False 的判别,运用 not,不要直接与 True 或 False 比较:

a = False

b = True

正确的写法

if not a:

pass

if b:

pass

过失的写法

if a == False:

pass
not 还可以用于判别元素是否在列表/字典中存在。