Python 你可能不知道的 Boolean 表达式b( ̄▽ ̄)d
Posted XianZhe_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 你可能不知道的 Boolean 表达式b( ̄▽ ̄)d相关的知识,希望对你有一定的参考价值。
Python 你可能不知道的 Boolean 表达式b( ̄▽ ̄)d
一、Boolean 表达式😺
Python 的语法相当的简明,有时只用一条表达式就能实现许多逻辑
Boolean 表达式 (布尔表达式) 用 Python 的语法写起来很简单,因为 Python 在对表达式求值的适合,会把空白字符串、空列表、空字典、以及 0
等,全部当成 False
来看待,所以根据这个原理能哦轻而易举实现 Boolean 表达式
根据一个问题来引入Boolean 表达式👇🏻
现有关于 张三、李四 信息的数据,但其中有每个人的信息各有缺失,如果在获缺失值的话得将缺失内容变成 0,那么要怎么做呢?
peoples = {
"张三": {"身高": 180, "性别": "男", "爱好": "法外狂徒"},
"李四": {"身高": 178, "体重": "58kg", "性别": "男"}
}
1)、if 语句
可以看到,张三缺少体重信息,李四缺少爱好信息,对于这种缺少元素最容易想到的是使用 if
语句
if "体重" not in peoples["张三"]:
zhangsan_weight = 0
else:
zhangsan_weight = peoples["张三"]["体重"]
if "爱好" not in peoples["李四"]:
lisi_likes = 0
else:
lisi_likes = peoples["爱好"]["爱好"]
可以发现的是,明明只是一个小小的逻辑却写的异常复杂,这很不符合Python 简洁的特点,使用 Boolean 表达式再来看看
2)、Boolean 表达式
原本多行的代码,瞬间就变成了两行代码,字典的 get
方法在获取不存在的key
值时会返回被 Python 判定为 False
的 None
值。所以,只需要把 get
方法查找到的结果放到 or
操作符左边,并且在右边写上个 0 就行了
zhangsan_weight = peoples["张三"].get("体重") or 0
lisi_likes = peoples["李四"].get("爱好") or 0
3)、字典 get 方法还能这样
上述关于 2)、Boolean 表达式 是为了便于讲解演示才这么去写,因为使用到了 字典的 get
方法,我们只需要在这个方法中再传入一个参数作为 key
值不存在时返回值即可
zhangsan_weight = peoples["张三"].get("体重", 0)
lisi_likes = peoples["李四"].get("爱好", 0)
二、Boolean 表达式适用范围
Boolean 表达式 (布尔表达式) 看起来是很简洁,但这个表达式可不能乱用,只适合简单的逻辑判断使用,再换一个相对复杂一点点的问题来看看
需求:判断用户输入是否为空,否则变为 0 值
1)、先来判断用户是否输入为空
输入为空的情况包含 全是空格以及直接回车
原理:
先对input
返回的数据使用 strip
内置函数去除内容两边的空白符,如果处理后的返回结果为空字符串,那即为空内容,同时在 Python 中会被当做 False
类型看待,只需一个简单的逻辑判断即可
enter = input("请输入:").strip()
num = enter or 0
2)、转换为整数
上面只是判断了是否为空,但这还没完全实现我们想要的效果,还得将其转化为能够直接参与数学运算的整数,先来看看 Boolean 表达式
enter = input("请输入:").strip()
num = int(enter or 0)
相信看到这就以及发现了问题,Boolean 表达式 看起来很别扭,比原来的更难读了
如果是第一次阅读此代码,这意味着得把整个表达式逐层拆分,才能明白这行代码的意思。代码当然应该写短点,但这不意味着非得挤成一行
Python 还能用 if/else
结果实现 三元的条件表达式,这样写会比刚才那种写法更清晰,且能保持代码简短
enter = input("请输入:").strip()
# num = int(enter or 0)
num = int(enter) if enter else 0
这里思考一个问题,如果还需要判断用户输入的是否为整数,或则判断是否为指定范围内的整数,使用 Boolean 表达式 能实现吗?
三、使用辅助函数取代复杂的表达式😝
还是以 二、Boolean 表达式适用范围 中的需求为例,我们将所有的要求都写到一个 辅助函数,以后就只用调用这个函数即可,这种写法要比使用 or
的复杂表达式与使用 if/else
的条件表达式清晰很多
三种方法进行对比👺
-
Boolean 表达式
enter = input("请输入:").strip() num = int(enter or 0)
-
三元表达式
enter = input("请输入:").strip() num = int(enter) if enter else 0
-
编写辅助函数
虽然使用辅助函数,需要多编几行代码,但可以让程序更加清晰,所以总体来说还是值得的def standard(string: str): if string: return int(string) else: return 0 enter = input("请输入:").strip() num = standard(enter)
语法简洁的 Python 虽然可以写出很多浓缩的语句,但应该避免让这样的写法把表达式弄的太复杂,应以清晰为主,同时要遵守 DRY 原则(Don‘t Repeat Yourself),也就是不要重复自己写过的代码
要点:👇🏻
- Python 的语法很容易把复杂的意思挤到同一行里,这样写很难懂
- 复杂的表达式,尤其是那种需要重复使用的复杂表达式,应该写到辅助函数里面
- 用
if/else
三元表达式,要比用or
与and
写成的 Boolean 表达式 更好懂
参考资料💌
- 书籍:
- Effective 系列丛书 《Effective Python》
这算是我最喜欢的 Python 书之一,非常推荐给大家
- Effective 系列丛书 《Effective Python》
由衷感谢💖
相关博客😏
以上是关于Python 你可能不知道的 Boolean 表达式b( ̄▽ ̄)d的主要内容,如果未能解决你的问题,请参考以下文章