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

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

前几天有看到一篇 Flask 开发团队内部 Python 编码风格指南 ,里面有一段关于比较的规范觉得很有意思:

任意类型之间的比较,使用 == 和 !=
与单例(singletons)进行比较时,使用 is 和 is not
永远不要与 True 或 False 进行比较(例如,不要这样写:foo == False,而应该这样写:not foo)
自己在写代码的时候很少去关注变量的比较要如何实现,基本都是直接使用 == 。今天就借此机会聊聊 Python 中的比较运算符。

== 与 !=

== 和 != 是等值校验。

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

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

py
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 还可以用于判断元素是否在列表/字典中存在。

相关文章
|
1月前
|
Python
【10月更文挑战第7天】「Mac上学Python 14」基础篇8 - 运算符详解
本篇将详细介绍Python中的运算符,包括数学运算、关系运算、逻辑运算、赋值运算和成员运算等内容。同时会说明运算符的优先级和运算顺序,帮助用户理解和掌握Python中的运算符使用规则。
37 3
【10月更文挑战第7天】「Mac上学Python 14」基础篇8 - 运算符详解
|
1月前
|
自然语言处理 Python
【python从入门到精通】-- 第三战:输入输出 运算符
【python从入门到精通】-- 第三战:输入输出 运算符
65 0
【python从入门到精通】-- 第三战:输入输出 运算符
|
1月前
|
存储 Java 编译器
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
这篇文章是关于Python编程语言中变量命名规则、基本数据类型、算数运算符、比较运算符、逻辑运算符、赋值运算符以及格式化输出与输入的详细教程。
18 0
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
|
2月前
|
Python
python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
这篇文章介绍了如何使用Python的第三方库chardet来检测字符串的编码类型,包括ASCII、GBK、UTF-8和日文编码的检测示例。
126 6
|
2月前
|
Python
Python 中如何指定 open 编码为ANSI
Python 中如何指定 open 编码为ANSI
|
1月前
|
Python
Python操作:字符串--列表--元组--字典--运算符 (一)
Python操作:字符串--列表--元组--字典--运算符 (一)
|
1月前
|
Python
Python操作:字符串--列表--元组--字典--运算符 (二)
Python操作:字符串--列表--元组--字典--运算符 (二)
|
3月前
|
JavaScript 前端开发 开发者
如何在 Python 中使用三元运算符?
【8月更文挑战第29天】
35 3
|
3月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
196 1
|
3月前
|
算法 测试技术 Python
Python接口自动化测试框架(基础篇)-- 有点意思的运算符
这篇文章介绍了Python中的各种运算符,包括算术运算符、比较运算符、赋值运算符、逻辑运算符、成员运算符、位运算符和身份运算符,并讨论了运算符的优先级,以及序列类型的相关知识。
21 0
Python接口自动化测试框架(基础篇)-- 有点意思的运算符