欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

在過(guò)去, |符號(hào)用于 "算術(shù)或"運(yùn)算,例如:

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

輸出:

0
1
{1, 2, 3}

在Python 3.10中, |符號(hào)有的新語(yǔ)法,可以表示x類(lèi)型 或 Y類(lèi)型,以取代之前的typing.Union 完成類(lèi)型注解

舉個(gè)栗子:

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

舊的寫(xiě)法:

from typing import Union


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

新的寫(xiě)法:

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

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

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

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

在過(guò)去,上下文管理器一般用于資源的自動(dòng)獲取和自動(dòng)釋放,利用打開(kāi)文件時(shí)使用上下文管理器:

with open("test.txt", "w") as f:  # 自動(dòng)打開(kāi)和關(guān)閉文件
    f.write("hello, 我是三木")    #  對(duì)文件進(jìn)行讀寫(xiě)

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

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

在Python3.10中,可以將代碼精簡(jiǎn)一下:

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

注意變化:

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

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

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

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

新功能3: 結(jié)構(gòu)模式匹配 (Structural Pattern Matching)

如果你熟悉或使用過(guò)php,Java或JavaScript等語(yǔ)言,可能見(jiàn)到switch語(yǔ)句,例如這樣:

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 = "星期六";
} 

簡(jiǎn)單來(lái)說(shuō):根據(jù)x的值,選擇指定的case語(yǔ)句進(jìn)行執(zhí)行

過(guò)去,Python沒(méi)有這樣的語(yǔ)句,所以現(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 = "別鬧...一個(gè)星期只有七天"

print(day)

輸出

星期一

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

別鬧...一個(gè)星期只有七天

注意:

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

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

總之,作為一個(gè)遲到了的“switch”,會(huì)在其他編程語(yǔ)言中的實(shí)踐經(jīng)驗(yàn)上進(jìn)行改進(jìn),成符合Python一貫的風(fēng)格:簡(jiǎn)單、靈活、強(qiáng)大。

新變化:性能改進(jìn)

與所有最新的Python版本一樣,Python 3.10也帶來(lái)了一些性能改進(jìn)。首先是str(),bytes()和bytearray()構(gòu)造函數(shù)的優(yōu)化,它們的速度應(yīng)該提高30%~40%左右(來(lái)自 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%)

此外,還有多個(gè)Python核心模塊正在進(jìn)行持續(xù)的優(yōu)化,讓我們繼續(xù)期待吧

新變化:zip支持長(zhǎng)度檢查

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

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

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

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

name_list = ['報(bào)警', '急救', '消防']
number_list = [110, 120, 119]

for i in zip(name_list, number_list):
    print(i)

輸出

('報(bào)警', 110)
('急救', 120)
('消防', 119)

上面的例子有一個(gè)特點(diǎn):name_list 和 number_list 長(zhǎng)度是相同的,如果長(zhǎng)度不同會(huì)怎么樣呢?

name_list = ['報(bào)警', '急救', '消防', '查號(hào)']
number_list = [110, 120, 119]

for i in zip(name_list, number_list):
    print(i)

輸出

('報(bào)警', 110)
('急救', 120)
('消防', 119)

注意:因?yàn)殚L(zhǎng)度不同,所以最后一組結(jié)果查號(hào)是不會(huì)顯示的,但是卻沒(méi)有任何提示,從結(jié)果來(lái)看,無(wú)法判斷是否有遺漏的數(shù)據(jù)。

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

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

輸出

('報(bào)警', 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的第二個(gè)參數(shù)比第一個(gè)參數(shù)短,于是拋出異常

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

相關(guān)文章

  • python logging設(shè)置level失敗的解決方法

    python logging設(shè)置level失敗的解決方法

    今天小編就為大家分享一篇python logging設(shè)置level失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python如何實(shí)現(xiàn)DES加密

    python如何實(shí)現(xiàn)DES加密

    這篇文章主要介紹了python如何實(shí)現(xiàn)DES加密,幫助大家更好的理解和學(xué)習(xí)密碼學(xué),感興趣的朋友可以了解下
    2020-09-09
  • Python中標(biāo)準(zhǔn)庫(kù)OS的常用方法總結(jié)大全

    Python中標(biāo)準(zhǔn)庫(kù)OS的常用方法總結(jié)大全

    python中的OS庫(kù)提供了使用各種操作系統(tǒng)功能的接口。是經(jīng)常用到的一個(gè)庫(kù),所以這篇文章主要給大家總結(jié)介紹了關(guān)于Python中標(biāo)準(zhǔn)庫(kù)OS的常用方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • 運(yùn)用python去除圖片水印

    運(yùn)用python去除圖片水印

    本文介紹了如何運(yùn)用python去除圖片的水印,文中使用圖片以及代碼詳細(xì)的介紹了兩種去除的方法,感興趣的朋友可以自己參考一下
    2021-08-08
  • Python Web框架Flask信號(hào)機(jī)制(signals)介紹

    Python Web框架Flask信號(hào)機(jī)制(signals)介紹

    這篇文章主要介紹了Python Web框架Flask信號(hào)機(jī)制(signals)介紹,本文介紹Flask的信號(hào)機(jī)制,講述信號(hào)的用途,并給出創(chuàng)建信號(hào)、訂閱信號(hào)、發(fā)送信號(hào)的方法,需要的朋友可以參考下
    2015-01-01
  • Python利用reportlab實(shí)現(xiàn)制作pdf報(bào)告

    Python利用reportlab實(shí)現(xiàn)制作pdf報(bào)告

    這篇文章主要為大家詳細(xì)介紹了reportlab生成流文件格式、reportlab分頁(yè)和圖片流文件寫(xiě)入reportlab等內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12
  • Python基于DB-API操作MySQL數(shù)據(jù)庫(kù)過(guò)程解析

    Python基于DB-API操作MySQL數(shù)據(jù)庫(kù)過(guò)程解析

    這篇文章主要介紹了Python基于DB-API操作MySQL數(shù)據(jù)庫(kù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python版中國(guó)省市經(jīng)緯度

    Python版中國(guó)省市經(jīng)緯度

    這篇文章主要介紹了Python版中國(guó)省市經(jīng)緯度,需要的朋友可以參考下
    2020-02-02
  • 通用的Django注冊(cè)功能模塊實(shí)現(xiàn)方法

    通用的Django注冊(cè)功能模塊實(shí)現(xiàn)方法

    這篇文章主要介紹了通用的Django注冊(cè)功能模塊實(shí)現(xiàn)步驟,幫助大家更好的理解和使用django,感興趣的朋友可以了解下
    2021-02-02
  • yolov5 win10 CPU與GPU環(huán)境搭建過(guò)程

    yolov5 win10 CPU與GPU環(huán)境搭建過(guò)程

    這篇文章主要介紹了yolov5 win10 CPU與GPU環(huán)境搭建過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評(píng)論