点击上方“程序员小乐”关注,star或置顶一起成长每天00:00,第一时间到遇见你每日英语不要为过去哭泣,它已经过去了。不要为未来感到压力,它还没有到来。活在当下,让它变得美丽。不要为过去哭泣,过去的已经过去了。不要担心未来,未来还没有到来。活在当下,也要活得漂亮。每天都在心里诉说,是不是所有的热血青年,都一定有一段深入骨髓的经历相伴。似乎没有痛彻心扉就没有爱情,似乎没有浓烈的感情就不是青春。来自:公众号机器之心|责任编辑:乐乐程序员小乐(ID:study_tech)第740条推文图片来自Pexels回顾往事:【图解】9张图吃透堆排序几个月前的文字Python3.8发布包含一个重要的新特征,海象运算符。如果使用得当,该运算符可以有效提高Python程序的执行效率。本文将介绍海象算子的作用和作用,并通过实例演示其用法和不适用场景。本文由软件工程师AnimeshGaitonde撰写。自从我开始学习Python并利用它的功能以来,我就一直是这门编程语言的忠实粉丝。Python的语法简单易学,有助于提高代码库的可读性和可维护性。用Python实现算法所需的代码比其他高级语言(如C、C++、Java或Ruby)少5倍。最近,Python社区发布了该语言的3.8版本。作为Python语法糖的爱好者,我浏览了发行说明并注意到其中一个独特的运算符。该运算符称为“海象运算符”或“命名表达式运算符”,符号为“:=”。海象运算符这个新运算符(:=)允许我们为表达式中的变量赋值。该符号看起来有点像海象的眼睛和犬齿。我们先来看下面这段代码:countries=["India","USA","France","Germany"]`iflen(countries)<5:`print("Lengthofcountriesis"+len(countries))在上面的代码片段中,我们调用了函数len()两次。我们可以避免重复计算以提高可读性吗?当然,我们可以改进这段代码如下:我们可以在没有单独一行的情况下分配“country_size”吗?ifcountry_size:=len(countries)<5:print("Lengthofcountriesis"+country_size)这就是Python3.8中引入的海象运算符的用武之地。我们可以直接在if语句中进行声明和赋值。我们将在下面进一步探讨此运算符的功能。代码行数和复杂度的平衡我们来看下面的例子powers=[get_count(),get_count()**2,get_count()**3]defget_count():"Fetchescountofrecords来自数据库”多次调用昂贵的函数上面的示例通过多次调用昂贵的函数get_count()来填充列表。在海象运算符的帮助下,我们可以避免多次调用函数get_count()。它的具体作用是将结果存储在一个变量中,然后我们可以在后续的计算中复用同一个变量。下面演示海象算子的用法:powers=[result:=get_count(),result**2,result**3]defget_count():"Fetchescountofrecordsfromadatabase"使用海象算子避免多次调用函数从上面的例子可以看出,海象运算符可以减少代码行数,使代码更具可读性,从而简化代码审查人员的工作。另外,这样也可以在代码行数和代码复杂度之间取得平衡。解决理解效率低下的问题employees=[]foridinemployee_ids:employee=fetch_employee(id)ifemployee:employees.append(employee)根据条件填充列表上面的例子需要多次执行循环。一开始,我们创建一个空列表,然后遍历id列表并通过检查结果是否有效来填充我们创建的列表。我们可以将上面的代码简化并浓缩成一行:将以块的形式读取文件。每次读取一个chunk都会检查它的值,也是while循环的终止条件。chunk=file.read(256)whilechunk:process(chunk)chunk=file.read(256)我们可以在while循环表达式中读取数据,并为要读取的数据赋值。这样我们就可以避免在while循环之外显式声明变量。下面的例子:whilechunk:=file.read(256):process(chunk)正则表达式匹配正则表达式匹配是一个两步过程。第一步是检查匹配,第二步是提取匹配的部分。obj=re.match(info).group(1)ifre.match(info)elseNone正则表达式匹配从上面的代码可以看出,我们在一次匹配中重复计算re.match(info)。这会减慢程序的执行速度,并且数据量越大,速度越慢。上面的代码可以重写如下,以避免重复计算:obj=match.group(1)ifmatch:=re.match(info)elseNone在不能使用海象运算符的正则表达式匹配中使用:=赋值变量a=5#valida:=5#invalidempty_list=[]#validempty_list:=[]#invalid如上所示,我们不能用:=代替=。海象运算符只能是表达式的一部分。加法/减法赋值a+=5#有效a:+=5#lambda函数中表达式的无效赋值(lambda:a:=5)#无效lambda:(a:=5)#有效但无用(var:=lambda:5)#EffectivePEP-572及其有争议的海象运算符作为PEP-572(Python改进提案)的一部分被引入。如果要将一个新特性引入Python语言,它总是需要通过PEP,并且必须得到Python的发明者GuidovanRossum或其选择的代表的批准。围绕海象运算符的争议非常多,由此引发的“战争”导致Python之父GuidovanRossum辞去Python社区终身仁慈独裁者(BDFL)的职务。海象运算符有很多争议点,这里列举其中的几个:语法更改问题:开发人员为:=提出了各种替代方案,例如“expression->NAME”、“NAME->expression”、“{expression}”姓名”等。一些人建议使用现有关键字,其他人建议使用新的运算符。向后兼容性问题:此功能不向后兼容,不适用于以前的Python版本。运算符名称问题:建议不要使用“海象运算符”之类的代号,而是使用“赋值运算符”、“命名表达式运算符”、“成为运算符”等术语,以免混淆。欢迎在留言区留下你的意见,共同讨论改进。如果今天的文章在提升学习能力上给你带来了新的启发和新的感悟,欢迎转发,分享给更多的人。欢迎读者加入程序员小乐技术群,只需在公众号后台回复“加群”或“学习”即可。猜猜你还想看阿里巴巴、腾讯、百度、华为、京东的最新面试题。Spring的IOC原理(通俗解释)Java会不会黑化?Kotlin会不会取代它一次SQL优化心得关注“程序员小乐”,看更多精彩内容嘿,你在看吗?
