当前位置: 首页 > 科技观察

Python3.8即将到来,这里有一些你需要注意的新特性

时间:2023-03-12 01:34:14 科技观察

从事计算机领域工作的读者应该对Python编程语言非常熟悉。这是一种广受欢迎的动态编程语言。它的灵活性和简单的语法使其广泛应用于脚本工具、数据分析和Web后端。Python开发社区也很活跃,3.x版本的迭代速度非常快。2018年6月底,Python3.7出来了,随后Python3.8的开发和测试也开始了。近日,Python软件基金会发布了3.80b2文档,向公众展示了beta版本的测试进展,以及Python3.8版本的新特性和功能改进。目前,Python3.8的beta测试过程正在进行中。今年6月初,第一个测试版Python3.80b1正式发布,一个月后发布了Python3.80b2。在第二个测试版发布后,增加了Python3.8的新特性。官方已经公布了最终版的发布时间,预计在今年10月份。那么,新的Python3.8版本有哪些新的特性和功能呢?机器之心根据Python基金会的公开文档整理了以下值得期待的新特性和功能改进。文档地址:https://docs.python.org/zh-cn/3.8/whatsnew/3.8.html#summary-release-highlights1.新的语法Python3.8最值得一提的是它的语法变化。这些新语法有助于提高效率并减少代码工作量。1.海象运算符(:=)这个“:=”从侧面看是不是有点像海象的脸?这是一种新的Python语法,可以在进行条件判断的时候直接给变量赋值。以前我们需要先给变量赋值,然后再进行条件判断。m=re.match(p1,line)ifm:returnm.group(1)else:m=re.match(p2,line)ifm:returnm.group(2)else:m=re.match(p3,line)...同时使用海象运算符,我们可以直接给变量赋值:ifm:=re.match(p1,line):returnm.group(1)elifm:=re.match(p2,line):returnm.group(2)elifm:=re.match(p3,line):循环中使用的另一个例子。以前一个变量必须在循环前赋值:ent=obj.next_entry()whileent:...#processentent=obj.next_entry()现在可以在循环时赋值:whileent:=obj.next_entry():...#processent2。Supportf-stringf-string(or"formattedstring")incodedebugginginPython3.6AddedinPython3.6,虽然这个特性很方便,但开发者发现f-strings对调试没有帮助。因此EricV.Smith向f-string添加了一些句法结构以使其对调试有用。在过去,f-strings可以这样使用:print(f'foo={foo}bar={bar}')在Python3.8中,只需使用以下代码(更简洁):print(f'{foo=}{bar=}')在这两种情况下,输出都是:>>>foo=42>>>bar='answer...'>>>print(f'{foo=}{bar=}')foo=42bar=answer...另外,还可以在赋值符号后加上“!s”和“!f”命令来指定输出结果的格式,例如:>>>importdatetime>>>now=datetime。datetime.now()>>>print(f'{now=}{now=!s}')now=datetime.datetime(2019,7,16,16,58,0,680222)now=2019-07-1616:58:00.680222>>>importmath>>>print(f'{math.pi=!f:.2f}')math.pi=3.14如代码所示,在等号后面加上"!s第二个“now”变量“字符,使得now输出从”datetime“类型输出为string类型输出。在“pi”的输出中,由于加入了“!f:.2f”,pi的输出变成了保留两位小数。花括号中的格式也会影响打印结果的格式,例如:>>>a=37>>>print(f'{a=},{a=}')a=37,a=37in花括号等号前后的间距不同,打印结果中的间距也不同。3、不带Keyword的变量输入语法,使函数在定义输入变量时规定只能输入Value,而无需在Value前加Keyword。例如,当使用pow()函数时:>>>pow(2,3)8>>>pow(x=2,y=3)...TypeError:pow()takesnokeywordarguments***methodislegal,但第二个是非法的。为了保证第一种纯Python函数方式,开发者可以在定义函数时使用“/”来指定哪些变量必须以第一种格式输入。例如:defpow(x,y,z=None,/):r=x**yifzisnotNone:r%=zreturnr在定义完所有变量后多加一个“/”字符,表示所有Python变量必须按照战俘(x,y,z)。当然,你也可以在变量之间插入“/”。正斜杠前的变量遵循纯Python输入法,正斜杠后的变量按照定义的方法执行。例如,定义如下函数:deffun(a,b,/,c,d,*,e,f):...那么下面的表达式有的是合法的,有的是非法的:fun(1,2,3,4,e=5,f=6)#legalfun(1,2,3,d=4,e=5,f=6)#legalfun(a=1,b=2,c=3,d=4,e=5,f=6)#illegal二、其他特性除了一些语法上的改进,Python3.8还有一些其他的变化。1.可移动的“__pycache__”__pycache__目录是由Python3解释器创建的,用来存放.pyc文件。这些文件保存着解释器编译.py文件后的字节码。以前版本的Python只是为每个.py文件创建一个.pyc文件,但新版本改变了这一点。为了支持多个版本的Python,包括一些不是CPython的版本(比如PyPy),库文件现在会为每个Python版本创建一个对应的.pyc文件,格式为“name.interp-version.pyc””。例如,一个foo.py文件在第一次使用时会创建一个对应的pyc文件,它的路径是“__pycache__/foo.cpython-37.pyc”,这个pyc文件会定义使用的Python版本。2.其他改进Python3.8将为原本属于CPython的C语言扩展增加一个更快的调用方法。在Python3.8中,这个特性是实验性的,最终完成的版本会出现在Python3.9中。同时,编译器中的初始化配置处理也得到了清理,使得Python可以更好的嵌入到其他程序中,而不需要依赖环境变量或者添加其他与现有Python系统产生冲突的组件。此外,对Python自身的模块进行了大量改进和调整,如“os.path”、“shutil”、“math”、“ssl”等。3、Python3.8什么时候与大家见面?发布时间还在讨论中,但考虑到Python3.9的发布计划(2020年6月左右),官方认为Python3.8的发布时间应该不会晚于今年10月。【本文为栏目组织《机器之心》微信公众号《机器之心(id:almosthuman2014)》原文翻译】点击此处查看作者更多好文