Python 编码风格指南:比较运算符

前段时间看到一篇 Flask 开发团队内部 Python 编码风格指南 ,里面有一段关于比较的规范:html

  • 任意类型之间的比较,使用 ==!=
  • 与单例(singletons)进行比较时,使用 isis not
  • 永远不要与 TrueFalse 进行比较(例如,不要这样写:foo == False,而应该这样写:not foo

本身在写代码的时候不多去关注变量的比较要如何实现,基本都是直接使用 == 。今天就借此机会聊聊 Python 中的比较运算符。python

== 与 !=

==!=等值校验编程

这两个运算符是咱们最熟悉不过的比较运算符了。== 会根据魔术方法 __eq__ 检测左右两侧对象的是否相等。设计模式

例如 x == y ,其实背后的操做是 x.__eq__(y)bash

is

is身份校验。它将检测左右两侧是否为同一个对象ide

同一个对象必须知足:ui

  1. 值相同
  2. 内存地址相同

所以就不难理解为何 isis not 用于单例(singletons)比较了。编码

单例(singletons)是什么?

单例是一种设计模式,应用该模式的类只会生成一个实例。spa

单例模式保证了在程序的不一样位置都能够且仅能够取到同一个对象实例.net

  • 若是实例不存在:会建立一个实例
  • 若是实例已存在:会返回这个实例

not

not 是 Python 中的逻辑判断词,经常使用于布尔型 TrueFalse

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,不要直接与 TrueFalse 比较:

a = False
b = True

# 正确的写法
if not a:
    pass
if b:
    pass

# 错误的写法
if a == False:
    pass
复制代码

not 还能够用于判断元素是否在列表/字典中存在。

参考资料与扩展阅读


若是你以为文章写得不错,请帮我两个小忙:

  1. 点赞并关注我,让这篇文章被更多人看到
  2. 关注公众号「编程拯救世界」,你将第一时间得到新文章的推送

你的鼓励是我写做最大的动力,谢谢你们!

相关文章
相关标签/搜索