电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解Python 3.10 中的新功能和變化

瀏覽:21日期:2022-06-20 17:48:37

隨著最后一個alpha版發布,Python 3.10 的功能更改全面敲定!

現在,正是體驗Python 3.10 新功能的理想時間!正如標題所言,本文將給大家分享Python 3.10中所有重要的功能和更改。

新功能1:聯合運算符

在過去, |符號用于 '算術或'運算,例如:

print(0 | 0)print(0 | 1)print({1, 2} | {2, 3})

輸出:

01{1, 2, 3}

在Python 3.10中, |符號有的新語法,可以表示x類型 或 Y類型,以取代之前的typing.Union 完成類型注解

舉個栗子:

函數的參數應該是一個int 或 str類型

舊的寫法:

from typing import Uniondef f(value: Union[int, str]) -> Union[int, str]: return value*2

新的寫法:

def f(value: int | str) -> int | str: return value*2

這種新的語法也被作為isinstance() 和issubclass() 的第二個參數,用于類型判斷

isinstance(1086, int | str) # 10086是否為 int型 或 str型新功能2: 多行上下文管理器

在過去,上下文管理器一般用于資源的自動獲取和自動釋放,利用打開文件時使用上下文管理器:

with open('test.txt', 'w') as f: # 自動打開和關閉文件 f.write('hello, 我是三木') # 對文件進行讀寫

如果要復制文件的話,需要打開源文件和目標文件,那么就需要2個上下文管理器,代碼會寫成這個樣子:

with open('test.txt', 'r') as f: # 打開第一個文件 with open('test_copy.txt', 'w') as f_copy: # 打開第二個文件content = f.read() # 從第一個文件獲取內容f_copy.write(content) # 向第二個文件寫入內容

在Python3.10中,可以將代碼精簡一下:

with ( open('test.txt', 'r') as f, # 打開第一個文件 open('test_copy.txt', 'w') as f_copy, # 打開第二個文件): content = f.read() # 從第一個文件獲取內容 f_copy.write(content) # 向第二個文件寫入內容

注意變化:

with 只出現了1次 在同一個代碼段,有2個上下文管理器f和 f_copy 這兩個上下文管理可以交互

此外,還可以更加靈(sao)活(qi)的操作:

with ( open('test.txt', 'r', encoding='utf-8') as f, # 打開第一個文件 open('test_copy.txt', 'w', encoding=f.encoding) as f_copy, # 打開第二個文件): content = f.read() # 從第一個文件獲取內容 f_copy.write(content) # 向第二個文件寫入內容

注意細節:在第2個open中,使用了第一個open的結果 :f

新功能3: 結構模式匹配 (Structural Pattern Matching)

如果你熟悉或使用過php,Java或JavaScript等語言,可能見到switch語句,例如這樣:

today = new Date().getDay();switch () { case 0:day = '星期天';break; case 1:day = '星期一'; break; case 2:day = '星期二'; break; case 3:day = '星期三'; break; case 4:day = '星期四'; break; case 5:day = '星期五'; break; case 6:day = '星期六';}

簡單來說:根據x的值,選擇指定的case語句進行執行

過去,Python沒有這樣的語句,所以現在,有了!

today = 1match today: case 0:day = '星期天' case 1:day = '星期一' case 2:day = '星期二' case 3:day = '星期三' case 4:day = '星期四' case 5:day = '星期五' case 6:day = '星期六' case _:day = '別鬧...一個星期只有七天'print(day)

輸出

星期一

如果將第一行改為today = 8,則輸出

別鬧...一個星期只有七天

注意:

匹配順序是從上往下 找到一個匹配的case后,會停止,所以不需要向JavaScript一樣寫break語句 如果有多個符合條件的case,后面的case也不會有機會匹配到了 如果沒有符合條件的匹配,則會執行case_,此_稱之為通配符,通配符是可選的

關于結構匹配模式(Structural Pattern Matching),可以說是Python 3.10 重量級的新功能,它還有很多高級用法,值得專門一篇文章來進行介紹,這里就先不展開了。

總之,作為一個遲到了的“switch”,會在其他編程語言中的實踐經驗上進行改進,成符合Python一貫的風格:簡單、靈活、強大。

新變化:性能改進

與所有最新的Python版本一樣,Python 3.10也帶來了一些性能改進。首先是str(),bytes()和bytearray()構造函數的優化,它們的速度應該提高30%~40%左右(來自 https://bugs.python.org/issue41334)

~ $ ./python3.10 -m pyperf timeit -q --compare-to=python 'str()'Mean +- std dev: [python] 81.9 ns +- 4.5 ns -> [python3.10] 60.0 ns +- 1.9 ns: 1.36x faster (-27%)~ $ ./python3.10 -m pyperf timeit -q --compare-to=python 'bytes()'Mean +- std dev: [python] 85.1 ns +- 2.2 ns -> [python3.10] 60.2 ns +- 2.3 ns: 1.41x faster (-29%)~ $ ./python3.10 -m pyperf timeit -q --compare-to=python 'bytearray()'Mean +- std dev: [python] 93.5 ns +- 2.1 ns -> [python3.10] 73.1 ns +- 1.8 ns: 1.28x faster (-22%)

此外,還有多個Python核心模塊正在進行持續的優化,讓我們繼續期待吧

新變化:zip支持長度檢查

PEP 618:zip()函數現在具有一個可選strict標志,用于要求所有可迭代對象具有相等的長度

首先回顧一下zip函數的用法:

在一個迭代中,同時向多個序列讀取內容,

可以將行變成列,列變成行,這類似于轉置矩陣。

name_list = [’報警’, ’急救’, ’消防’]number_list = [110, 120, 119]for i in zip(name_list, number_list): print(i)

輸出

(’報警’, 110)(’急救’, 120)(’消防’, 119)

上面的例子有一個特點:name_list 和 number_list 長度是相同的,如果長度不同會怎么樣呢?

name_list = [’報警’, ’急救’, ’消防’, ’查號’]number_list = [110, 120, 119]for i in zip(name_list, number_list): print(i)

輸出

(’報警’, 110)(’急救’, 120)(’消防’, 119)

注意:因為長度不同,所以最后一組結果查號是不會顯示的,但是卻沒有任何提示,從結果來看,無法判斷是否有遺漏的數據。

在Python 3.10,可以給zip()傳遞參數strict=True,對長度進行嚴格檢查

for i in zip(name_list, number_list, strict=True): print(i)

輸出

(’報警’, 110)(’急救’, 120)(’消防’, 119)Traceback (most recent call last): File 'C:UserssanPycharmProjectspy310a.py', line 4, in <module> for i in zip(name_list, number_list, strict=True):ValueError: zip() argument 2 is shorter than argument 1

注意: zip的第二個參數比第一個參數短,于是拋出異常

以上就是詳解Python 3.10 中的新功能和變化的詳細內容,更多關于Python 3.10 中的新功能和變化的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | Win10系统下载_32位/64位系统/专业版/纯净版下载 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 餐饮加盟网_特色餐饮连锁加盟店-餐饮加盟官网 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 球盟会·(中国)官方网站 | 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 合金ICP光谱仪(磁性材料,工业废水)-百科| 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 浙江自考_浙江自学考试网 | 辐射仪|辐射检测仪|辐射巡测仪|个人剂量报警仪|表面污染检测仪|辐射报警仪|辐射防护网 | 河南膏药贴牌-膏药代加工-膏药oem厂家-洛阳今世康医药科技有限公司 | 上海盐水喷雾试验机_两厢式冷热冲击试验箱-巨怡环试 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 搪瓷搅拌器,搪玻璃搅拌器,搪玻璃冷凝器_厂家-淄博越宏化工设备 | 交通气象站_能见度检测仪_路面状况监测站- 天合环境科技 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 加盟店-品牌招商加盟-创业项目商机平台 | 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 防爆正压柜厂家_防爆配电箱_防爆控制箱_防爆空调_-盛通防爆 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 分光色差仪,测色仪,反透射灯箱,爱色丽分光光度仪,美能达色差仪维修_苏州欣美和仪器有限公司 | 湖南自考_湖南自学考试网| 温州食堂承包 - 温州市尚膳餐饮管理有限公司 | 双相钢_双相不锈钢_双相钢圆钢棒_双相不锈钢报价「海新双相钢」 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 铸铁平台,大理石平台专业生产厂家_河北-北重机械 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 大型工业风扇_工业大风扇_大吊扇_厂房车间降温-合昌大风扇 | 上海诺狮景观规划设计有限公司 |