当前位置: 首页 > 后端技术 > Python

加油加油,Python3.9正式版发布啦~~~

时间:2023-03-26 15:52:33 Python

摘要:2020年10月5日,在全国人民欢庆国庆中秋佳节之际,Python3.9正式悄然发布。2020年10月5日,在举国欢庆国庆中秋之际,Python3.9正式悄然发布。让我们来看看这个版本有哪些有趣的新特性,以及对我们部门现有产品可能产生的影响。由于jupyternotebook/lab等工具还没有适配python3.9,我们还不能使用,所以本文使用python的交互线来演示。Python3.9官方文档,What'sNewinPython3.9,其文字条理清晰,我们将按顺序进行讲解,发布亮点,新特性,新模块,改进模块,优化,弃用,移除。大家注意文字组织的顺序,我们产品发布的时候也是这样。先说一下这个版本吸引人的亮点,然后介绍新版本的新内容,最后介绍deprecated/removed,提醒大家升级的时候要注意什么,顺序很清楚。安装截至2020年10月9日,anaconda上没有支持直接安装python3.9的频道,所以如果你想尝鲜,有两种方式:1.从http://python下载安装包。org2.去Anaconda的conda-forge频道下载安装文件。我们使用第二种方法。安装文件的下载链接见参考资料。$condacreate-npy39-cconda-forge-y$condaactivatepy39$condainstallpython-3.9.0-h60c2a47_1_cpython.tar.bz2$whichpython/d/Anaconda3/envs/py39/python$python-VPython3.9.0ReleaseHighlightsPython3.9内容包括:3个新的语法特性1个新的内置特性2个新的标准库特性6个解释器升级2个新的库模块如果你完成以上所有,你可能需要1-2个小时。这里我们将选取一些与我部门产品开发相关的内容。具体来说,如果你对其他内容感兴趣,可以自行阅读。新功能DictionaryMerge&UpdateOperatorsdict类提供合并(|)和更新(|=)运算符。#py38>>>x={"key1":"value1fromx","key2":"value2fromx"}>>>y={"key2":"value2fromy","key3":"value3来自y"}>>>{**x,**y}{'key1':'value1fromx','key2':'value2fromy','key3':'value3fromy'}>>>x.update(y)>>>x{'key1':'value1fromx','key2':'value2fromy','key3':'value3fromy'}#py39>>>x={"key1":"value1fromx","key2":"value2fromx"}>>>y={"key2":"value2fromy","key3":"value3fromy"}>>>x|y{'key1':'value1fromx','key2':'value2fromy','key3':'value3fromy'}>>>y|x{'key2':'value2fromx','key3':'value3fromy','key1':'value1fromx'}这样对dict操作会更方便。删除前缀和后缀的新字符串方法>>>"NavyXie".removeprefix("Navy")'Xie'>>>"NavyXie".removesuffix("Xie")'Navy'这会删除字符串中不必要的前缀或后缀,会更方便。标准集合中的类型提示泛型在类型注释中,您可以使用内置的集合类型,例如list和dict,而无需导入相应的大写类型,例如typing.List或typing.Dict。defgreet_all(names:list[str])->None:fornameinnames:print("Hello",name)注解是python3.0引入的特性。它是做什么用的?与Java/C/C++/Swift等强类型语言不同,Python和JavaScript都属于弱类型语言。这里的类型注解不强制解析或运行时传递的参数类型,只是帮助开发者阅读和理解代码。维持。另外,如果我们使用python3.7引入的库dataclasses,我们会发现在定义一个数据类的时候,类型注解是必须的,比如:>>>fromdataclassesimportdataclass>>>@dataclass...defTestClass:...name:str...>>>TestClass.__annotations__{'name':}这时候会更有用,我们可以这样写:names:list[str]而不是像之前那样:names:List[str]新解析器Python3.9开始使用基于PEG的新解析器,而不是LL(1)。两者性能相差不大,但PEG更加灵活。由此我们可以推断,从Python3.10开始,将会引入更多新的语言特性。新的模块zoneinfo在我们操作时区的时候会更加方便。之前我们处理timezone的时候,需要用到pytz包,例如:#py38importpytzfromdatetimeimportdatetimetz=pytz.timezone("America/Los_Angeles")start_time=datetime.now(tz)现在可以通过标准库中的zoneinfo模块,如:fromzoneinfoimportZoneInfotz=ZoneInfo("America/Los_Angeles")tuple、set、frozenset、list、dict使用vectorcall协议进行了优化。不过有意思的是,从性能优化报告中我们可以看到,从3.8到3.9的性能并没有提升,甚至还有小幅度的下滑。Python版本3.43.53.63.73.83.9------------------------------变量和属性读取访问:read_local7.17.15.45.13.94.0read_nonlocal7.18.15.85.44.44.8read_global15.519.014.313.67.67.7read_builtin21.121.618.519.07.57.7read_classvar_from_class25.626.520.719.518.418.6read_classvar_from_instance22.823.518.817.116.420.1read_instancevar32.433.128.026.325.427.7read_instancevar_slots27.831.320.820.820.224.5read_namedtuple73.857.545.046.818.423.2read_boundmethod37.637.929.626.927.745.9Variableandattributewriteaccess:write_local8.79.35.55.34.34.2write_nonlocal10.511.15.65.54.74.9write_global19.721.218.018.015.817.2write_classvar92.996.0104.6102.139.243.2write_instancevar44.645.840.038.935.540.7write_instancevar_slots35.636.127.326.625.727.7数据结构读访问:read_list24.224.520.820.819.021.1read_deque24.725.520.220.619.821.6read_dict24.325.722.323.024.3.022.3.022.323.024.3.019.521.218.921.6Datastructurewriteaccess:write_list27.128.522.521.620.021.6write_deque28.730.122.721.823.523.2write_dict31.433.329.329.224.727.8write_strdict28.429.927.525.223.129.8Stack(orqueue)operations:list_append_pop93.4112.775.474.250.853.9deque_append_pop43.557.049.449.242.545.5deque_append_popleft43.757.349.749.742.845.5Timingloop:loop_overhead0.50.60.40.30.30.3备注:以上结果是python官方benchmark,Tools/scripts/var_access_benchmark.py,的运行结果,单位为纳秒,thehardwareisIntel?Core?i7-4960HQprocessor,theOSismacOS64-bitNoteDeprecated/Removed我摘录了一些可能与我们部门的产品高度相关的点:(1)Python3.9是最后一个提供向后兼容Python2的版本,所以下一个版本Python3.10将不再兼容Python2.(2)threading.Thread类的isAlive()方法被删除,取而代之的是is_alive()。(3)base64.encodestring()和base64.decodestring()被删除,替换为base64.encodebytes()和base64.decodebytes()。(4)删除json.loads()的encoding参数,编码必须为UTF-8、UTF-16或UTF-32。回顾Python3.8的一些特性最后,让我们回顾一下Python3.8的一些新特性,如果你在工作中没有尝试过,现在就试试吧。海象运算符:=if(n:=len(a))>10:print(f"Lististoolong({n}elements,expected<=10)")仅位置参数deff(a,b,/,c,d,*,e,f):print(a,b,c,d,e,f)f-string支持=>>>user='eric_idle'>>>member_since=date(1975,7,31)>>>f'{user=}{member_since=}'"user='eric_idle'member_since=datetime.date(1975,7,31)">>>delta=date.today()-member_since>>>>f'{user=!s}{delta.days=:,d}''user=eric_idledelta.days=16,075'>>>print(f'{theta=}{cos(radians(theta)))=:.3f}')theta=30cos(radians(theta))=0.866ReferencesWhat'snewinpython3.9,https://docs.python.org/3/wha...What'snewinpython3.8,https://docs.python.org/3/wha...Conda-forgepython文件,https://anaconda.org/conda-fo...Python3.9tar,https://anaconda.org/conda-fo...点击关注,第一时间了解华为云新技术~