最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年04月28日 15:56:31   作者:東方天宇  
這篇文章主要介紹了詳解Python 3.10 中的新功能和變化,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下

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

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

新功能1:聯(lián)合運算符

在過去, |符號用于 "算術(shù)或"運算,例如:

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

輸出:

0
1
{1, 2, 3}

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

舉個栗子:

函數(shù)的參數(shù)應(yīng)該是一個int 或 str類型

舊的寫法:

from typing import Union


def f(value: Union[int, str]) -> Union[int, str]:
    return value*2

新的寫法:

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

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

 isinstance(1086, int | str)   # 10086是否為 int型 或 str型

新功能2: 多行上下文管理器

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

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

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

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

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

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

注意變化:

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

此外,還可以更加靈(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()  # 從第一個文件獲取內(nèi)容
    f_copy.write(content)  # 向第二個文件寫入內(nèi)容

注意細(xì)節(jié):在第2個open中,使用了第一個open的結(jié)果 :f

新功能3: 結(jié)構(gòu)模式匹配 (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 = "星期六";
} 

簡單來說:根據(jù)x的值,選擇指定的case語句進行執(zhí)行

過去,Python沒有這樣的語句,所以現(xiàn)在,有了!

today = 1
match  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,則輸出

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

注意:

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

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

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

新變化:性能改進

與所有最新的Python版本一樣,Python 3.10也帶來了一些性能改進。首先是str(),bytes()和bytearray()構(gòu)造函數(shù)的優(yōu)化,它們的速度應(yīng)該提高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核心模塊正在進行持續(xù)的優(yōu)化,讓我們繼續(xù)期待吧

新變化:zip支持長度檢查

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

首先回顧一下zip函數(shù)的用法:

在一個迭代中,同時向多個序列讀取內(nèi)容,

可以將行變成列,列變成行,這類似于轉(zhuǎn)置矩陣。

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)

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

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

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

輸出

('報警', 110)
('急救', 120)
('消防', 119)
Traceback (most recent call last):
  File "C:\Users\san\PycharmProjects\py310\a.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的第二個參數(shù)比第一個參數(shù)短,于是拋出異常

以上就是詳解Python 3.10 中的新功能和變化的詳細(xì)內(nèi)容,更多關(guān)于Python 3.10 中的新功能和變化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 對Python發(fā)送帶header的http請求方法詳解

    對Python發(fā)送帶header的http請求方法詳解

    今天小編就為大家分享一篇對Python發(fā)送帶header的http請求方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • pytorch 實現(xiàn)查看網(wǎng)絡(luò)中的參數(shù)

    pytorch 實現(xiàn)查看網(wǎng)絡(luò)中的參數(shù)

    今天小編就為大家分享一篇pytorch 實現(xiàn)查看網(wǎng)絡(luò)中的參數(shù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python logging日志模塊使用指南

    Python logging日志模塊使用指南

    Python 的 logging 模塊提供了標(biāo)準(zhǔn)的日志接口,可以通過它存儲各種格式的日志,日志記錄提供了一組便利功能,用于簡單的日志記錄用法,本文就給大家簡單的介紹一下Python logging日志模塊使用方法,需要的朋友可以參考下
    2023-08-08
  • Python2.7環(huán)境Flask框架安裝簡明教程【已測試】

    Python2.7環(huán)境Flask框架安裝簡明教程【已測試】

    這篇文章主要介紹了Python2.7環(huán)境Flask框架安裝方法,結(jié)合實例形式詳細(xì)分析了Python2.7環(huán)境下安裝Flask框架遇到的問題與相關(guān)解決方法、注意事項,并給出了一個基本的測試示例,需要的朋友可以參考下
    2018-07-07
  • 打包PyQt5應(yīng)用時的注意事項

    打包PyQt5應(yīng)用時的注意事項

    這篇文章主要介紹了打包PyQt5應(yīng)用時的注意事項的相關(guān)資料,需要的朋友可以參考下
    2020-02-02
  • 關(guān)于Python不換行輸出和不換行輸出end=““不顯示的問題(親測已解決)

    關(guān)于Python不換行輸出和不換行輸出end=““不顯示的問題(親測已解決)

    這篇文章主要介紹了關(guān)于Python不換行輸出和不換行輸出end=““不顯示的問題(親測已解決),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Python自動化測試框架之unittest使用詳解

    Python自動化測試框架之unittest使用詳解

    unittest是Python自動化測試框架之一,提供了一系列測試工具和接口,支持單元測試、功能測試、集成測試等多種測試類型。unittest使用面向?qū)ο蟮乃枷雽崿F(xiàn)測試用例的編寫和管理,可以方便地擴展和定制測試框架,支持多種測試結(jié)果輸出格式
    2023-04-04
  • 如何使用python的subprocess執(zhí)行命令、交互、等待、是否結(jié)束及解析JSON結(jié)果

    如何使用python的subprocess執(zhí)行命令、交互、等待、是否結(jié)束及解析JSON結(jié)果

    這篇文章主要給大家介紹了關(guān)于如何使用python的subprocess執(zhí)行命令、交互、等待、是否結(jié)束及解析JSON結(jié)果的相關(guān)資料,subprocess模塊提供了一種簡單的方法來創(chuàng)建和管理子進程,它可以讓我們在Python程序中執(zhí)行外部命令,獲取命令的輸出和錯誤信息,需要的朋友可以參考下
    2023-12-12
  • 基于Python編寫微信清理工具的示例代碼

    基于Python編寫微信清理工具的示例代碼

    這篇文章主要和大家分享一個用Python語言編寫的微信清理小工具的示例代碼,而且該工具不會刪除文字的聊天記錄,感興趣的可以了解一下
    2022-05-05
  • Selenium+Python自動化腳本環(huán)境搭建的全過程

    Selenium+Python自動化腳本環(huán)境搭建的全過程

    說到自動化測試,就不得不提大名鼎鼎的Selenium,Selenium 是如今最常用的自動化測試工具之一,支持快速開發(fā)自動化測試框架,且支持在多種瀏覽器上執(zhí)行測試,下面這篇文章主要給大家介紹了關(guān)于Selenium+Python自動化腳本環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評論

安西县| 仙桃市| 湄潭县| 盖州市| 郎溪县| 镇平县| 贞丰县| 玉溪市| 乌什县| 博乐市| 吴忠市| 北海市| 德化县| 新郑市| 忻州市| 论坛| 登封市| 多伦县| 仲巴县| 焦作市| 稷山县| 呈贡县| 靖江市| 武安市| 陆良县| 收藏| 阳信县| 临夏市| 平潭县| 剑川县| 怀宁县| 桂平市| 无锡市| 宁远县| 广元市| 定西市| 松桃| 土默特右旗| 贵阳市| 凯里市| 盐津县|