0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

​Python 3.8:海象运算符的三种用法

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-21 11:07 次阅读

Python 版本发展非常快,如今最新的版本已经是 Pyhton 3.9,即便如此,有很多人甚至还停留在 3.6 或者 3.7,连 3.8 还没用上。

很多 Python 3.8 的特性还没来得及了解,就已经成为旧知识了,比如今天要说的海象运算符。

海象运算符是在 PEP 572 被提出的,直到 3.8 版本合入发布。

它的英文原名叫 Assignment Expressions,翻译过来也就是 赋值表达式,不过现在大家更普遍地称之为海象运算符,就是因为它长得真的太像海象了。

1. 第一个用法:if/else

可能有朋友是第一次接触这个新特性,所以还是简单的介绍一下这个海象运算符有什么用?

在 Golang 中的条件语句可以直接在 if 中运算变量的获取后直接对这个变量进行判断,可以让你少写一行代码

import "fmt"

func main() {
    if age := 20;age > 18 {
        fmt.Println("已经成年了")
    }
}

若在 Python 3.8 之前,Python 必须得这样子写

age = 20
if age > 18:
    print("已经成年了")

但有了海象运算符之后,你可以和 Golang 一样(如果你没学过 Golang,那这里要注意,Golang 中的 := 叫短变量声明,意思是声明并初始化,它和 Python 中的 := 不是一个概念)

if (age:= 20) > 18:
    print("已经成年了")

2. 第二个用法:while

在不使用 海象运算符之前,使用 while 循环来读取文件的时候,你也许会这么写

file = open("demo.txt", "r")
while True:
    line = file.readline()
    if not line:
        break
    print(line.strip())

但有了海象运算符之后,你可以这样

file = open("demo.txt", "r")
while (line := file.readline()):
    print(line.strip())

使用它替换以往的无限 while 循环写法更为惊艳

比如,实现一个需要命令行交互输入密码并检验的代码,你也许会这样子写

while True:
   p = input("Enter the password: ")
   if p == "youpassword":
      break

有了海象运算符之后,这样子写更为舒服

while (p := input("Enter the password: ")) != "youpassword":
   continue

3. 第三个用法:推导式

这个系列的文章,几乎每篇都能看到推导式的身影,这一篇依旧如此。

在编码过程中,我很喜欢使用推导式,在简单的应用场景下,它简洁且不失高效。

如下这段代码中,我会使用列表推导式得出所有会员中过于肥胖的人的 bmi 指数

members = [
    {"name": "小五", "age": 23, "height": 1.75, "weight": 72},
    {"name": "小李", "age": 17, "height": 1.72, "weight": 63},
    {"name": "小陈", "age": 20, "height": 1.78, "weight": 82},
]

count = 0

def get_bmi(info):
    global count
    count += 1

    print(f"执行了 {count} 次")

    height = info["height"]
    weight = info["weight"]

    return weight / (height**2)

# 查出所有会员中过于肥胖的人的 bmi 指数
fat_bmis = [get_bmi(m) for m in members if get_bmi(m) > 24]

print(fat_bmis)

输出如下

执行了 1 次
执行了 2 次
执行了 3 次
执行了 4[25.88057063502083]

可以看到,会员数只有 3 个,但是 get_bmi 函数却执行了 4 次,原因是在判断时执行了 3 次,而在构造新的列表时又重复执行了一遍。

如果所有会员都是过于肥胖的,那最终将执行 6 次,这种在大量的数据下是比较浪费性能的,因此对于这种结构,我通常会使用传统的for 循环 + if 判断。

fat_bmis = []

# 查出所有会员中过于肥胖的人的 bmi 指数
for m in members:
    bmi = get_bmi(m)
    if bmi > 24:
        fat_bmis.append(bmi)

在有了海象运算符之后,你就可以不用在这种场景下做出妥协。

# 查出所有会员中过于肥胖的人的 bmi 指数
fat_bmis = [bmi for m in members if (bmi := get_bmi(m)) > 24]

最终从输出结果可以看出,只执行了 3 次

执行了 1 次
执行了 2 次
执行了 3[25.88057063502083]

这里仅介绍了列表推导式,但在字典推导式和集合推导式中同样适用。不再演示。

海象运算符,是一个新奇的特性,有不少人觉得这样这种特性会破坏代码的可读性。确实在一个新鲜事物刚出来时是会这样,但我相信经过时间的沉淀后,越来越多的人使用它并享受它带来的便利时,这种争议也会慢慢消失在历史的长河中。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 文件
    +关注

    关注

    1

    文章

    566

    浏览量

    24737
  • python
    +关注

    关注

    56

    文章

    4796

    浏览量

    84668
  • 运算符
    +关注

    关注

    0

    文章

    172

    浏览量

    11083
收藏 人收藏

    评论

    相关推荐

    C语言中位运算符的高级用法(1)

    在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍& 运算符的一些高级用法
    发表于 08-22 10:44 324次阅读
    C语言中位<b class='flag-5'>运算符</b>的高级<b class='flag-5'>用法</b>(1)

    C语言中位运算符的高级用法(2)

    在上一篇文章中,我们介绍了&运算符的高级用法,本篇文章,我们将介绍| 运算符的一些高级用法
    发表于 08-22 10:45 329次阅读
    C语言中位<b class='flag-5'>运算符</b>的高级<b class='flag-5'>用法</b>(2)

    C语言中位运算符的高级用法(3)

    在上一篇文章中,我们介绍了|运算符的高级用法,本篇文章,我们将介绍^ 运算符的一些高级用法
    发表于 08-22 10:47 257次阅读
    C语言中位<b class='flag-5'>运算符</b>的高级<b class='flag-5'>用法</b>(3)

    C语言中位运算符的高级用法(4)

    在上一篇文章中,我们介绍了^运算符的高级用法,本篇文章,我们将介绍~ 运算符的一些高级用法
    发表于 08-22 10:48 224次阅读
    C语言中位<b class='flag-5'>运算符</b>的高级<b class='flag-5'>用法</b>(4)

    C语言中位运算符的高级用法(5)

    在上一篇文章中,我们介绍了~运算符的高级用法,本篇文章,我们将介绍
    发表于 08-22 10:49 342次阅读
    C语言中位<b class='flag-5'>运算符</b>的高级<b class='flag-5'>用法</b>(5)

    2.7 python运算符

    2.7 python运算符0. 什么是运算符?本章节主要说明Python运算符。举个简单的例子 4 +5 = 9 。 例子中,4和5被称为
    发表于 02-21 16:43

    移位运算符的应用实例讲解

    移位运算符在程序设计中,是位操作运算符的一。移位运算符可以在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:(带符号
    的头像 发表于 11-19 07:04 3516次阅读
    移位<b class='flag-5'>运算符</b>的应用实例讲解

    干货:大实例讲解三种C++运算符重载

    本章节主要讲解是运算符重载。运算符重载是赋予运算符能操作自定义类型的功能。C++运算符重载主要分为以下类:
    的头像 发表于 09-30 16:59 3443次阅读
    干货:<b class='flag-5'>三</b>大实例讲解<b class='flag-5'>三种</b>C++<b class='flag-5'>运算符</b>重载

    python运算符是什么

    python运算符 0. 什么是运算符? 本章节主要说明Python运算符。举个简单的例子 4 +5 = 9 。 例子中,4和5被称为操作
    的头像 发表于 02-21 16:44 2386次阅读

    条件(元)运算符

    RTL建模中广泛使用的运算符是条件运算符,也称为运算符,该运算符用于在两个表达式之间进行选择——表5-2列出了用于表示条件
    的头像 发表于 02-09 15:42 1364次阅读
    条件(<b class='flag-5'>三</b>元)<b class='flag-5'>运算符</b>

    c语言运算符及例题

    C语言中逻辑运算符包含逻辑与&&、逻辑或||、逻辑非!三种。其中逻辑与&&是双目运算符,即需要运算符两边都要有表达式,且两边表达式都为真,此表达式才为真;逻辑||也是双目
    发表于 02-16 16:14 0次下载

    Python运算符介绍

    : print(“a《30”) if 4 《= a 《= 30: print(“1《=a《=10”) if 4 《= a a 《= 30”) 3. 位运算符 按位运算符是把数字看作二进制来进行计算的。Python中的按位
    的头像 发表于 03-08 17:22 1115次阅读

    python运算符优先级顺序口诀

    Python是一非常流行的编程语言,具有广泛的应用领域。在Python中,运算符是进行各种数学和逻辑运算的关键部分。了解
    的头像 发表于 11-22 14:34 2597次阅读

    python运算符的优先级大小

    Python运算符的优先级决定了表达式中各个运算符的计算顺序。了解运算符的优先级对于正确理解和编写复杂的表达式非常重要。本文将详细介绍Python
    的头像 发表于 11-29 16:21 3417次阅读

    逻辑异或运算符Python中的用法

    Python编程语言中,逻辑异或运算符并不直接作为一个内置的操作存在,因为Python更侧重于高级编程和可读性,并没有直接提供异或运算符
    的头像 发表于 11-19 09:46 179次阅读