当前位置: 首页 > 图灵资讯 > 行业资讯> python中的海象运算符

python中的海象运算符

来源:图灵python
时间: 2025-02-27 18:41:48

海象运算符在那里 PEP 572 直到被提出 3.8 版本合并发布。

它的英文原名是 Assignment Expressions,翻译就是这样 赋值表达式,但现在人们更常称之为海象运算符,因为它看起来真的太像海象了。

1. 第一种用法:if/else

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

在 Golang 条件语句中的条件语句可以直接在中间 if 获得中运算变量后,可以直接判断变量,这样可以少写一行代码

import"fmt"

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

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

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

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

if(age:=20)>18:
print("已经成年了")
2. 第二种用法:while

在不使用 在使用海象运算符之前 while 当你循环阅读文件时,你可能会这样写

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

但是有了海象运算符,你可以这样做

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

用它代替以前的 while 循环写法更令人惊叹

例如,实现一个需要命令行交互输入密码并检查的代码,你可能会这样写

whileTrue:
p=input("Enterthepassword:")
ifp=="youpassword":
break

有了海象运算符,这样写起来更舒服

while(p:=input("Enterthepassword:"))!="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

defget_bmi(info):
globalcount
count+=1

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

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

returnweight/(height**2)

#发现所有会员中肥胖者的bmi指数
fat_bmis=[get_bmi(m)forminmembersifget_bmi(m)>24]

print(fat_bmis)

输出如下

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

可以看出,会员数量只有 3 个,但是 get_bmi 但是函数执行了 4 第二,原因是在判断中执行 3 第二,在构建新列表时重复执行。

如果所有会员都太肥胖,最终会执行 6 第二,这种性能在大量数据下是浪费的,所以我通常使用传统的for结构 循环 + if 判断。

fat_bmis=[]

#发现所有会员中肥胖者的bmi指数
forminmembers:
bmi=get_bmi(m)
ifbmi>24:
fat_bmis.append(bmi)

有了海象运算符,你就不必在这种情况下妥协了。

#发现所有会员中肥胖者的bmi指数
fat_bmis=[bmiforminmembersif(bmi:=get_bmi(m))>24]

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

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

这里只介绍列表推导式,但也适用于字典推导式和集合推导式。不再演示。

海象运算符是一个新颖的特征,许多人认为它会破坏代码的可读性。当一件新事物刚刚出来时,这是真的,但我相信,经过时间的沉淀,越来越多的人使用它,享受它带来的便利,这种争议将在漫长的历史河流中慢慢消失。


有关python的更多文章,请关注python自学网。

上一篇:

python面对对象编程

下一篇:

返回列表