前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈 Python 中的比较运算符

浅谈 Python 中的比较运算符

作者头像
江不知
发布2019-12-12 15:49:38
1.1K0
发布2019-12-12 15:49:38
举报
文章被收录于专栏:编程拯救世界编程拯救世界
前段时间看到一篇《Flask 开发团队内部 Python 编码风格指南》[1] ,里面有一段关于比较的规范:
  • 任意类型之间的比较,使用 ==!=
  • 与单例(singletons)进行比较时,使用 isis not
  • 永远不要与 TrueFalse 进行比较(例如,不要这样写:foo == False,而应该这样写:not foo

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

== 与 !=

==!=等值校验

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

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

is

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

同一个对象必须满足:

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

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

单例(singletons)是什么?

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

单例模式保证了在程序的不同位置都可以且仅可以取到同一个对象实例

  • 如果实例不存在:会创建一个实例
  • 如果实例已存在:会返回这个实例

not

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

代码语言:javascript
复制
not True -> False
not False -> True

逻辑判断

代码语言:javascript
复制
a = False
# not a 为 True
if not a:
    pass

判断元素是否存在

代码语言:javascript
复制
a = 100
b = [1, 2, 3]
# 元素 a 是否不在列表 b 中
if a not in b:
    pass

总结

仅对值进行简单比较时可以使用 ==/!= 操作符:

代码语言:javascript
复制
a = 1
b = 2
if a == b:
    pass
else:
    pass

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

代码语言:javascript
复制
if a is None:
    pass

if a is not None:
    pass

如果涉及布尔值 True/False 的判断,使用 not,不要直接与 TrueFalse 比较:

代码语言:javascript
复制
a = False
b = True

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

# 错误的写法
if a == False:
    pass

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

References

参考资料与扩展阅读

  • Python != operation vs “is not”: https://stackoverflow.com/questions/2209755/python-operation-vs-is-not
  • Python 魔术方法指南: https://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-methods.html

文内引用

  • [1] 《Flask 开发团队内部 Python 编码风格指南》: https://my.oschina.net/leejun2005/blog/615953
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程拯救世界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • == 与 !=
  • is
    • 单例(singletons)是什么?
    • not
      • 逻辑判断
        • 判断元素是否存在
        • 总结
        • References
          • 参考资料与扩展阅读
            • 文内引用
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档