python-3.8.0 新特性之赋值表达式

python-3.8.0 新特性之赋值表达式

赋值表达式的语法是这样的“ name := expression ”,形式上看和赋值语句 “ = ” 差不多,就作用上来看也雷同。也就是说 “:=” 不是必不可少的,它只是一个锦上添花的新语法。

 

1、例子

假设我们要对列表中的元素个数进行判断,当其大于 3 个的时候打印出提示信息,用老的语法我们可以这样写。

#!/usr/bin/env python3if __name__ == "__main__":ls = [1,2,3,4,5]if len(ls) > 3: # 第一次计算 len(ls)print(f"ls is too long ({len(ls)} elements,expected < 3)") # 第二次计算 len(ls)

可以看到在上面的代码中我们重复的计算了 len(ls) ,虽然 python 内部对于 len(ls) 会有一些优化操作,但是我们并不想重复自己,要优化办法也是有的把 len(ls) 前置一下就行。

#!/usr/bin/env python3if __name__ == "__main__":ls = [1,2,3,4,5]n = len(ls) # 第一次计算 len(ls)if n > 3:print(f"ls is too long ({n} elements,expected < 3)") # 直接使用变量 n ,省去了一次计算过程

 

2、用新特性重写

感觉说什么都是在注水,直接上代码

#!/usr/bin/env python3if __name__ == "__main__":ls = [1,2,3,4,5]if (n:=len(ls)) > 3: # 只要计算一次print(f"ls is too long ({n} elements,expected < 3)") # 直接使用赋值表达式中的 n 同样也省去了一次计算

 

3、两种写法的比较

优劣分析

# 写法 一 
#!/usr/bin/env python3if __name__ == "__main__":ls = [1,2,3,4,5]n = len(ls)if n > 3:print(f"ls is too long ({n} elements,expected < 3)")# 写法 二
#!/usr/bin/env python3if __name__ == "__main__":ls = [1,2,3,4,5]if (n:=len(ls)) > 3:print(f"ls is too long ({n} elements,expected < 3)")

 

python 这门语言最好的一个地方就在于它的一致性,不管是专家还是初生牛犊,只要一看到他人的代码大致就可以猜到他接下来想做什么,久而久之同一类型的问题就有了最 pythonic 的写法了。

第一种写法当我们看到 “n = len(ls)” 时即不能回答作者想要用 n 来做什么?也不能回答“后面的代码一定会用到 n 吗?”这样的问题,要解答这些问题都要要求我们往下看代码。

第二种写法当我们看到 “if (n:=len(ls)) > 3:” 一来我们直接可以看出这个 if 依赖于 n 的值,二来后面的代码也非常有可能会用到 n ,如果不用的话直接写成 “if len(ls) > 3:” 不就行了吗? 

总结:把正确的属性用在正确的地方是可以提高代码可读性的。

 

4、:= 与 = 的关系

看官方的意思 “:=” 是作为 “=” 的一个补充而存在的,并不是想用 “:=” 替换掉 “=”,下面看一下它两是互补的一个例子

#!/usr/bin/env python3if __name__ == "__main__":x = 5print(f"x = {x}")y := 5 # SyntaxError: invalid syntaxprint(f"y = {y}")#这样的写法是会报语法错误的,我觉得这里体现了官方的两个重要的思想# 1、可以用 "=" 解决的事就不要用 ":=" 防止引起混乱# 2、对于一个给定的问题最 pythonic 的写法通常只有一种
(z := 5)print(f"z = {z}")

 

5、新写法带来的最佳实践

# 一 简化 os.fork 
if pid := os.fork():# Parent code
else:# Child code# 二 直接到把 socket 对象的 read buffer 读完为止
while data := sock.recv(8192):print("Received data:", data)

 

转自

https://www.sqlpy.com/blogs/books/2/chapters/10/articles/51

 

转载于:https://www.cnblogs.com/JiangLe/p/11180376.html

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

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

相关文章

普通二本的辛酸Android面试之路,算法太TM重要了

前言 编程是一个江湖&#xff0c;江湖之大&#xff0c;鱼龙混杂&#xff0c;一部分江湖人士乃虾兵蟹将&#xff0c;一不小心就被一箭射死&#xff0c;我们称之为“码农”&#xff0c;这些人事江湖的重要组成部分&#xff0c;他们承担着堆砌代码&#xff0c;实现功能设计的使命…

SQL常用日期处理函数(转)

/**datepart()函数的使用 * datepart()函数可以方便的取到时期中的各个部分*如日期&#xff1a;2006-07--02 18&#xff1a;15&#xff1a;36.513* yy:取年 2006* mm:取月 7* dd:取月中的天 2* dy:取年中的天 183* wk:取…

最全的BAT大厂面试题整理,系列篇

前言 看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了&#xff0c;但是中高级的Android技术人才仍然稀缺“&#xff0c;这的确不假&#xff0c;从我在百度所进行的一些面试来看&#xff0c;找一个适合的高级Android工程师的确不容易&#xff0c;一般需要进行大…

记录资料,

C#(1)面向对象的分析与设计(uml 2.0)版(2)C#字符串和正则表达式参考手册.pdf (3)C#应用程序开发全程演练——从灵感到实现.pdf 中文版外加两章 英文的,从出版社网站下. (4)C#大学教程 清华大学译,少好几章.英文版不错.我读的是第一版 .现在有第二版 . (5)C# WINDOWS程序设计 没…

最全面试考点与面试技巧,大厂面经合集

前言 对于字节跳动的二面三面而言&#xff0c;FrameworkMVP架构HashMap原理性能优化Flutter源码分析等问题都成高频问点&#xff01;然而很多的朋友在面试时却答不上或者答不全&#xff01;今天在这分享下这些问点的视频解析给大家&#xff0c;希望对有需要的朋友有所帮助&…

阿里云sql监控配置-druid

今天我们说说数据源和数据库连接池&#xff0c;熟悉java开发的同仁应该都了解C3PO&#xff0c;在这里不做过多的赘述了&#xff0c;今天我们说的是阿里DRUID&#xff0c;druid是后起之秀&#xff0c;因为它的优秀很快占领了使用市场&#xff0c;下边我们一起来看看druid数据源的…

最全面试考点与面试技巧,真香!

写在前面 身边有不少去大厂面试的朋友&#xff0c;其中小金面试字节跳动的经历很有意义&#xff0c;在这里分享给大家。小金是末流211计算机专业大三本科生&#xff0c;前几天面试了字节跳动的广州Android开发实习生。下面是他的面试经历&#xff0c;还有一些他自己的经验。 …

最强Android教程!2021年Android面经分享,大厂面经合集

前言 找工作还是需要大家不要紧张&#xff0c;有我们干这一行的接触人本来就不多 难免看到面试官会紧张&#xff0c;主要是因为怕面试官问的问题到不上来&#xff0c;那时候不要着急 &#xff0c;答不上了的千万不然胡扯一些&#xff0c;直接就给面试官说这块我还没接触到&…

最强整理!字节跳动历年Android中高级面试题全收录!附超全教程文档

开头 让我们一起来看看&#xff0c;字节跳动的第三面&#xff0c;面试官都问了什么&#xff1f;&#xff08;第一二面的题目及答案已整理&#xff0c;需要的可以在文末领取&#xff09; 从七月中旬开始&#xff0c;我前前后后差不多一共投递了八十份简历&#xff0c;到目前为…

最新BAT大厂面试者整理的Android面试题目模板,分享PDF高清版

前言 从毕业到现在面试也就那么几家公司&#xff0c;单前几次都比较顺利&#xff0c;在面到第三家时都给到了我offer&#xff01;前面两次找工作&#xff0c;没考虑到以后需要什么&#xff0c;自己的对未来的规划是什么&#xff0c;只要有份工作&#xff0c;工资符合自己的要求…

C# 利用DotRas 操作adsl

开源项目地址&#xff1a;http://dotras.codeplex.com/ 使用这个可以方便的操作ADSL拨号、断开。有详细的开发文档&#xff0c;需要的可以自己去看。。 /// <summary>/// 创建或更新一个PPPOE连接(指定PPPOE名称)/// </summary>void CreateOrUpdatePPPOE(string up…

最新BAT大厂面试者整理的Android面试题目模板,成功入职字节跳动

前言 **一年中第一段跳槽高潮就要来了&#xff0c;**看到同事一个个离职&#xff0c;又有一部分同事已经找到满意的工作&#xff0c;于是自己也盲目的开始面试起来&#xff08;期间也没有准备充分&#xff09;&#xff0c;日夜奔走&#xff0c;简历投了很多家公司&#xff0c;…

python note 29 线程创建

1、线程 import time import threadingdef task(a1,a2,a3):time.sleep(2)print(拿快递)def play():print(和女朋友去耍)def wm():print(去拿外卖)# 创建一个线程 # 让该线程去执行任务&#xff1a;函数 t1 threading.Thread(targettask,args(1,2,3,)) # 去执行吧 t1.start()# …

算法题+JVM+自定义View,终局之战

关于面试题 打个比方&#xff0c;如果把找工作理解成考大学&#xff0c;面试就是高考&#xff0c;市面上的“真题”就是模拟试卷。我们会很容易倾向于在面试前寻找对应公司的面试“真题”&#xff0c;重点准备&#xff0c;期待“押题”成功。但实际上&#xff0c;即使面试同一…

PostgreSQL 安装 用户配置

一、为什么选择 PostgreSQL 自从MySQL被Oracle收购以后&#xff0c;PostgreSQL逐渐成为开源关系型数据库的首选。 MySQL被oracle收购&#xff0c;innodb随之被oracle控制。 二、安装 1、MacOS 最方便的方法是安装 PostgreSQL.app。 2、Linux &#xff08;CentOS 7&#xff09; …

系统学Android从零开始,搞懂这些直接来阿里入职

开头 很多人说Android开发前景越来越差了 我觉得这个回答是片面的 首先Android应用开发前景差是在最近两年出现的&#xff0c;也就是从2018开始&#xff0c;从那时起移动端的程序员已经慢慢出现供大于求的局面&#xff0c;本人作为移动端开发&#xff0c;深知这一点。 然而也…

Bginfo软件在域的部署和应用

在企业的IT管理中&#xff0c;很多用户都不知道怎么去查看自己计算机的IP地址、登陆帐户。而对于网络管理人员来说&#xff0c;他们可能需要知道用户在域中登录的一些信息&#xff0c;如那些用户登录过&#xff0c;在什么时间登录&#xff0c;IP和MAC地址是多少&#xff1b;需要…

系统学Android从零开始,详细的Android学习指南

Android面试相关整理 最近有一点找工作的打算&#xff0c;想补下面试题。但是发现网上面试相关的文章特别多&#xff0c;不知道从何看起&#xff0c;所以简单的总结了一下我有印象的一些&#xff0c;方便自己随时查看&#xff0c;本想带下个人评价&#xff0c;但有些没有仔细看…

WPF中解决内存泄露的几点提示与解决方法

一直以来用WPF做一个项目&#xff0c;但是开发中途发现内存开销太大&#xff0c;用ANTS Memory Profiler分析时&#xff0c;发现在来回点几次载入页面的操作中&#xff0c;使得非托管内存部分开销从起始的43.59M一直到150M&#xff0c;而托管部分的开销也一直持高不下&#xff…

组件化与插件化的差别在哪里?内含福利

前言 今年上半年其实就已经有了换工作的想法,奈何疫情原因和岗位缩减&#xff0c;加之信心不足&#xff0c;到六月底投递了百度的Android岗位,本以为像我这种非211、985没工作经验的渣渣只能被直接pass,结果却意外的收到了电话,真是受宠若惊.经过电面,技术三面,然后就是等通知…