Python编码风格篇:比较运算符
前几天有看到一篇 Flask 开发团队内部 Python 编码风格指南 ,里面有一段关于比较的规范觉得很有意思:
任意类型之间的比较,使用 == 和 !=
与单例(singletons)进行比较时,使用 is 和 is not
永远不要与 True 或 False 进行比较(例如,不要这样写:foo == False,而应该这样写:not foo)
自己在写代码的时候很少去关注变量的比较要如何实现,基本都是直接使用 == 。今天就借此机会聊聊 Python 中的比较运算符。
== 与 !=
== 和 != 是等值校验。
这两个运算符是我们最熟悉不过的比较运算符了。== 会根据魔术方法 eq 检测左右两侧对象的值是否相等。
例如 x == y ,其实背后的操作是 x.__eq__(y)。
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 还可以用于判断元素是否在列表/字典中存在。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一文看懂 K8s 日志系统设计和实践
上一篇中我们介绍了为什么需要一个日志系统、为什么云原生下的日志系统如此重要以及云原生下日志系统的建设难点,相信DevOps、SRE、运维等同学看了是深有体会的。本篇文章单刀直入,会直接跟大家分享一下如何在云原生的场景下搭建一个灵活、功能强大、可靠、可扩容的日志系统。 需求驱动架构设计 技术架构,是将产品需求转变为技术实现的过程。对于所有的架构师而言,能够将产品需求分析透彻是非常基本也是非常重要的一点。很多系统刚建成没多久就要被推翻,最根本的原因还是没有解决好产品真正的需求。 我所在的日志服务团队在日志这块有近10年的经验,几乎服务阿里内部所有的团队,涉及电商、支付、物流、云计算、游戏、即时通讯、IoT等领域,多年来的产品功能的优化和迭代都是基于各个团队的日志需求变化。 有幸我们最近几年在阿里云上实现了产品化,服务了数以万计的企业用户,包括
- 下一篇
Python基础教程:用Python怎么telnet到网络设备
Python基础教程:用Python怎么telnet到网络设备 0.前言 Telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再熟悉不过了,常用于远程登陆到网络设备进行操作,但是,它的缺陷太明显了,就是不安全,信息明文传送,极容易被攻击窃取信息,不推荐使用,但本节我还是先从它入手哈。 1. 测试环境及关键代码解释 1.1 简单测试环境 使用python3环境使用内置telnetlib模块简单的实验环境 说明: cmd.txt文件里面命令如下: terminal length 0 show clock show ip interface brief list.txt文件里面的IP如下: 192.168.1.101 192.168.1.102 192.168.1.103 1.2 关键代码 import xx:导入模块 class xx:定义类 def xx: 定义函数 try-except :处理可能引发的异常 tn.read_until(expected, timeout=None):等待预期字符串或等待超时 tn.write(buffer):写入的字符串(意思发...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果