随着Python3.8的发布,赋值表达式运算符(又名海象运算符)也发布了。运算符使赋值能够传递到表达式中。这通常会将语句数减少一个。例如:my_list=[1,2,3]count=len(my_list)ifcount>3:print(f"Error,{count}istoomanyitems")#whenconvertingtowalrusoperator...if(count:=len(my_list))>3:print(f"Error,{count}istoomanyitems")如果你快速看一下,你就会明白对这个新操作的担忧。似乎将两个简单的陈述混为一谈以获得最小的收益。假设对于为什么引入这个运算符有一个合理的答案?所以很自然地会想到,它在现实世界中有什么用处?我发现了我将继续使用海象运算符的三个领域,每个领域都提供除了节省一行代码之外的好处。While循环While循环似乎是海象运算符最常见的用例。这里使用海象运算符的好处是可以在while语句中组合表达式和修饰符。我写过无数次无限循环,因为我总是忘记在循环结束时写修改语句。line=f.readLine()whileline:print(line)line=f.readLine()#当转换为海象运算符时...whileline:=f.readLine():print(line)但是要小心,使用walrus运算符更适合在传统的do/while循环中使用,因为赋值在循环表达式之前。请参阅下面的差异:n=0whilen<3:print(n)#0,1,2n+=1#当转换为海象运算符时...w=0while(w:=w+1)<3:print(w)#1,2根据我有限的经验,我发现它在替换无限while循环时最有用:whileTrue:p=input("Enterthepassword:")ifp=="thepassword":break#当转换为海象运算符时...while(p:=input("Enterthepassword:"))!="thepassword":continue能够将while循环转换为语句真是太好了。列表理解我发现海象运算符有助于优化某些列表理解语句。有两个条件1)需要过滤数据,2)存储征税功能的结果。让我们看看传统的列表理解语句:scores=[22,54,75,89]valid_scores=[longFunction(n)forninscoresiflongFunction(n)]注意条件语句longFunction(n)?请注意longFunction()是如何被调用两次的?这是海象运算符的候选。scores=[22,54,75,89]valid_scores=[resultforninscoresresult:=longFunction(n)]在优化代码中,longFunction()只被调用一次,这隐含地减少了调用次数。处理返回的数据接下来是我认为最有用的海象运算符实现。我经常使用名为iFormBuilder的移动数据收集软件。具体来说,请求一条记录(一行数据)后,需要在查询返回数据时对其进行处理。这是我每天写的代码块:#寻找失败的检查#如果有失败的检查,分配给technicalrecords=api.readFailedRecords()iflen(records)>0:forrecordinrecords:api.assignToTechnician(record)I认真阅读记录,认真敲代码,保证代码块只在返回列表有数据时执行:ifrecords:=api.readFailedRecords():forrecordinrecords:api.assignToTechnician(record)for可读性说起来,这种重构是破坏性最小的,事实上我发现海象运算符在这种情况下更容易阅读。与前两个示例形成鲜明对比的是,前两个示例对可读性的影响较小,有利于安心和性能。总结walrus算子是一个新的且有争议的,但只有时间才能看到它被接受。你开始在你的代码中使用它了吗?以上就是本次分享的全部内容。想了解更多python知识,请前往公众号:Python编程学习圈,发“J”免费领取,每日干货分享
