Python3.8引入海象运算符(Walrus Operator)的一些认识

news2024/11/25 1:54:35

1、引言

这个运算符为什么跟海象联系在一起呢?因为看起来像是躺着的海象,其中眼睛和牙齿的形象表示就是海象运算符了,如下图:

海象运算符,也叫做海象选择器,在Go语言中很常见,Python3.8也开始引入,我们在前面的ROS键盘遥控机器人,通过参数服务器指定速度 中有介绍,使用参数指定速度的时候,使用的就是海象运算符

./keys_to_twist_ramps.py _linear_scale:=0.5 _angular_scale:=1.0 _linear_accel:=1.0 _angular_accel:=1.0

在启动launch文件的时候,有时候也比较常用到这个海象运算符,比如加载模型描述文件:
roslaunch pkg_name xxx.launch model:='$(find urdf_pkg)/urdf/x.urdf'
其用法跟赋值运算符=,看起来是特别类似,不过还是区别很大的。
既然在新的版本引入它,我想应该是存在一些优势,所以借鉴进来,GoGoGo我们一起来了解下。

2、示例

使用海象运算符可以将代码变得更加的简洁,而且在某些情况下,使用海象运算符可以提高代码的性能。比如将表达式的部分值赋值给变量,可以避免在循环中重复计算相同的表达式,从而提高代码的效率。

2.1、赋值

赋值运算是最常见的,这种情况是可以使用海象运算符,让代码变得更简洁高效

x = 11
if x > 10:print("x大于10")
#转换成海象运算符
if (y := 11) > 10:print("y大于10")

x="hello world"
n=len(x)
if (n > 10):print(f"x长度{n},大于10")
#x长度11,大于10

#转换成海象运算符
y="hello chyichin"
if (n := len(y)) > 10:print(f"y长度{n},大于10")
#y长度14,大于10

通过海象运算符,这里的n就不需要要再次计算字符串的长度了。

 2.2、循环

n=3
while n:
    print(n)
    n-=1
/*
2
1
0
*/

转成海象运算符:

n=3
while (n := n-1)+1:
    print(n)
/*
2
1
0
*/

 同样的,在下面这个获得输入的情况下,也是可以直接获取并赋值的

while True:
    txt=input("输入hello:")
    if(txt=='hello'):break

#转成海象运算符:
while (txt := input("输入hello:"))!='hello':continue

2.3、读取文件

读取文件时,使用while来不断读取,其用法也是同上:

f = open('test.txt','r',encoding='utf-8')
while True:
    content=f.read()
    if not content:break
    print(content)

f.close()

换成海象运算符:

f = open('test.txt','r',encoding='utf-8')
while content := f.read():
    print(content)

2.4、列表推导

使用列表推导的时候,海象运算符可以提高性能,我们来看个示例,常规的一个写法:

l=[1,3,5,7,9]
n=0
def f(x):
    global n
    n+=1
    print(f"执行次数:{n}")
    return x**2

print([f(i) for i in l if f(i)>1])
/*
执行次数:1
执行次数:2
执行次数:3
执行次数:4
执行次数:5
执行次数:6
执行次数:7
执行次数:8
执行次数:9
[9, 25, 49, 81]
*/

我们来看下其执行的一个过程:5个数的平方,执行5次,另外从列表[1, 9, 25, 49, 81]获取大于1的值,满足条件的值有4个,所以需再次执行4次,所以总计执行9次。

而我们换成海象运算符的情况,只需要执行5次即可,如下:

l=[1,3,5,7,9]
n=0
def f(x):
    global n
    n+=1
    print(f"执行次数:{n}")
    return x**2

print([x for i in l if (x := f(i))>1])
/*
执行次数:1
执行次数:2
执行次数:3
执行次数:4
执行次数:5
[9, 25, 49, 81]
*/

3、区别

这里的区别主要是针对赋值运算符=,因为看起来很像,所以需要注意一些常见的场景是不能使用海象运算符的

3.1、赋值运算

a=1这个没有问题,如果使用海象运算符a:=1

  File "<stdin>", line 1
    a:=1
     ^
SyntaxError: invalid syntax

就会报语法错误。所以这样直接进行赋值操作是不可以的,也没有必要。

3.2、符合赋值运算

同样的,a+=3这样的复合赋值运算符,也不能使用海象运算符a:+=3

  File "<stdin>", line 1
    a:+=3
      ^
SyntaxError: invalid syntax

3.3、匿名函数

另外注意lambda表示的用法

f1=lambda x:x**3
f1(3)
#27

 这样常规写是没有问题,如果换成海象运算符也是不行的

f2:=lambda x:x**3
File "<stdin>", line 1
    f2:=lambda x:x**3
      ^
SyntaxError: invalid syntax

需要小括号括起来,这样就可以了

(f2:=lambda x:x**3)
f2(4)
#64

我们用海象运算符本身的目的是,使代码更加简洁优雅和提高性能,如果过度或者不当的使用,反而会使代码的可读性和性能都下降。所以还是看场景来运用,一切都是为了代码的可读性和计算的性能,不能舍本逐末!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能直流自动清洁离子风机的优势和应用

智能直流自动清洁离子风机是一种高效、智能化的通风设备&#xff0c;具有以下优势&#xff1a; 清洁方便&#xff1a;智能直流自动清洁离子风机配备了自动清洁功能&#xff0c;可以自动清洁离子发生器&#xff0c;减少清洁维护的时间和成本。 高效节能&#xff1a;智能直流自动…

2003 - Can‘t connect to MysQL server on ‘39.108.169.0‘ (10060 “Unknown error“)

问题描述 某天和往常一样启动java项目&#xff0c;发现数据库出问题了&#xff0c;然后打开navicat&#xff0c;发现数据库的链接都连接不上&#xff0c; 一点击就会弹出报错框&#xff1a; 然后就各种上网搜索。 解决方案 上网查了一些解决方案&#xff0c;大部分都是说看…

随想录一刷·数组part1

你好&#xff0c;我是安然无虞。 文章目录 1. 二分查找题型2. 移除元素题型 1. 二分查找题型 二分查找传送门 class Solution { public:int search(vector<int>& nums, int target) {// 在有序数组中查找第一时间想到二分查找int left 0, right nums.size() - 1…

似乎我养的这只猫可能正能犯二

真的会有弱智猫吗&#xff1f;请问&#xff0c;我家小猫天天跑酷发疯 然后不停的撞到头还撞的哐哐响&#xff0c;就刚刚五分钟以内她已经撞了七八次头了&#xff0c;我真觉得她有点不聪明。 我刚准备上卫生间&#xff0c;然后扭头看一下它&#xff0c;它看我回过头来然后就赶紧…

【致远】致远OA取消个人空间显示。

【问题需求】 使用致远系统OA软件过程中&#xff0c;由于公司各个部门有对应的空间布局。 所以想要各个部门人员登陆后&#xff0c;默认对应部门空间。 但是所有人登录后&#xff0c;都会默认为个人空间。 虽然在首页设置–导航设置中&#xff0c;可以将个人空间取消显示&#…

5个最流行的文本生成纹理AI工具

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 拥抱文本生成纹理AI模型改变游戏规则的力量&#xff0c;人工智能驱动的创新彻底改变了游戏开发中的资产创建。 这些出色的工具可将书面描述转换…

数据抽样技术全面概述

抽样是研究和数据收集中不可或缺的方法&#xff0c;能够从更大数据中获得有意义的见解并做出明智的决定的子集。不同的研究领域采用了不同的抽样技术&#xff0c;每种技术都有其独特的优点和局限性。本文将深入探讨了最常见的抽样技术&#xff0c;包括随机抽样、分层抽样、系统…

界面控件DevExtreme v23.1新版亮点 - 数据层、可访问性功能升级

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

【Servlet】 一

本文主要介绍了如何在tomcat部署一个webapp 以及 如何借助maven用servlet编写一个hello world . 一.Tomcat Tomcat是一个Java里广泛使用的http服务器 HTTP服务器有很多实现&#xff0c;其中最知名的是Nginx&#xff1b;而在Java里&#xff0c;最知名的是Tomcat 一个Tomcat服务…

mysql数据库【基础】

本教程适合有一定基础的人&#xff0c;我是用来复习mysql数据&#xff0c;跟着教程走一遍熟悉一下mysql的语句 数据准备 下面的数据库查询语句都是基于此表进行查询的 员工表 创建表&#xff1a; -- 创建表 drop table if exists emp; create table emp (id int …

vue基于ElementUI/Plus自定义的一些组件

vue3-my-ElementPlus 源码请到GitHub下载使用MyTable、MySelect、MyPagination 置顶|Top | 使用案例&#xff1a; 1.0 定义表格数据&#xff08;测试使用&#xff09; data() {return {tableData: [],value:[],valueList: [],}; },// 构造表格测试数据// 1 第一行&#xf…

什么是 Windows 时间服务?

文章目录 Windows时间服务概述Windows时间服务包括的组件Windows时间服务&#xff08;W32Time&#xff09;时间同步协议时间服务器时间配置事件日志 时间协议的重要性推荐阅读 Windows时间服务概述 Windows 时间服务 (W32Time) 为计算机提供网络时钟同步&#xff0c;默认无需进…

09 _ 队列:队列在线程池等有限资源池中的应用

我们知道,CPU资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致CPU频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。 当我们向固定大小的线程池中请求一个线程时,如果线程池中没…

uniapp使用抖音微信自定义组件

tt.vue中使用video-player组件 用到的目录如下&#xff1a; pages.json {"path": "pages/Tabbar/tt/tt","style": {"navigationBarTitleText": "","enablePullDownRefresh": false,// 使用自定义组件"using…

基于springboot实现在线考试平台项目【项目源码+论文说明】

基于springboot实现在线考试平台管理系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合&#xff0c;利用java技术建设在线考试系统&#xff0c;实现在线考试的信息化。则对于进一步提高在线考试管理发展&#xff0c;丰富在线考试管理经…

python脚本-探查存活主机

python脚本-探查存活主机 代码 from scapy.all import * import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR) net"10.9.47." # 此处修改目标网段 for host in range(1,255):ipf"{net}{host}"# print(f"[-]Trin…

API接口的定义|电商API接口的接入测试和参数说明【附代码实例教程】

一 . API接口的定义 API全称Application Programming Interface&#xff0c;即应用程序编程接口&#xff0c;是一些预先定义的函数&#xff0c;或指软件系统不同组成部分衔接的约定&#xff0c;用于传输数据和指令&#xff0c;使应用程序之间可以集成和共享数据资源。 简单来…

CFCA证书

1&#xff0c;什么是CFCA证书&#xff1f; CFCA证书是中国金融认证中心颁发的数字证书&#xff0c;用于验证网络通信中的身份和数据完整性。它采用了公钥基础设施&#xff08;PKI&#xff09;技术&#xff0c;能够为用户和服务提供商提供可信的身份认证和数据加密服务&#xf…

污水处理环保设备怎么选

要选择合适的污水处理环保设备&#xff0c;可以考虑以下几个方面&#xff1a; 1. 根据自身的项目需求来设定预算&#xff0c;不要盲目追求大型或昂贵的设备&#xff0c;符合项目要求的设备才是最合适的选择。 2. 注意设备所使用的材质&#xff0c;通常情况下&#xff0c;碳钢…

JSON比较:如何轻松判断数据格式是否相同?

目录 一、JSON概述 二、比较JSON数据格式的必要性 三、比较JSON数据格式的方法 1. 基于字符串的比较 2. 基于结构的比较 四、注意事项 五、总结 本文将深入探讨如何判断两个JSON数据格式是否相同。我们将介绍JSON的基本概念&#xff0c;探讨比较JSON数据格式的必要性&am…