<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          關(guān)于 Python 3.9,那些你不知道的事

          共 3122字,需瀏覽 7分鐘

           ·

          2020-09-23 19:49

          點擊上方“Python 知識大全”,關(guān)注并“星標(biāo)

          號外:

          本號免費提供 CSDN 資源下載,需要的伙伴公眾號后臺回復(fù)【CSDN】


          來源:CSDN-Ayushi Rawat

          文章將涉及:


          • 字典并集和可迭代更新
          • 字符串方法
          • 類型提示
          • 新的數(shù)學(xué)函數(shù)
          • 新的解析器
          • IPv6范圍內(nèi)的地址
          • 新模塊:區(qū)域信息
          • 其他語言更改


          字典并集和可迭代更新
          字典并集
          我最喜歡的新特性之一是流暢的語法。
          Python 3.9 dict類。如果有兩個字典a和b,則現(xiàn)在可以使用這些運算符進行合并和更新。
          我們有合并運算符|:
          還有更新運算符| =,它會更新原始字典:
          a = {1: 'a', 2: 'b', 3: 'c'}b = {4: 'd', 5: 'e'}a |= bprint(a){1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
          如果我們的詞典共享一個公用密鑰,那么第二個詞典中的鍵值對將會被使用:
          a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'}b = {4: 'd', 5: 'e', 6: 'but different'}print(a | b){1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}
          使用Iterables進行字典更新
          | =運算符的另一個很棒的性能是能夠使用可迭代對象(如列表或生成器)用新的鍵值對來更新字典:
          a = {'a': 'one', 'b': 'two'}b = ((i, i**2) for i in range(3))a |= bprint(a){'a': 'one', 'b': 'two', 0: 0, 1: 1, 2: 4}
          如果我們嘗試使用標(biāo)準(zhǔn)的并集運算符|,則會提示類型錯誤,因為它僅允許dict類型之間的并集。
          字符串方法
          removeprefix()和removesuffix()
          str.removeprefix(substring:string)字符串方法:如果str以它開頭的話,將會返回一個修改過前綴的新字符串,否則它將返回原始字符串。
          str.removesuffix(substring:string)字符串方法:如果str以其結(jié)尾,則返回帶有修改過后綴的新字符串,否則它將返回原始字符串。
          這兩個函數(shù)執(zhí)行的操作將使用string [len(prefix):]作為前綴,string [:-len(suffix)]作為后綴。
          這些是非常簡單的操作,因此實現(xiàn)的也是非常簡單的功能,但是考慮到可能會經(jīng)常執(zhí)行這些操作,最好有一個內(nèi)置的函數(shù)可以完成此操作。
          類型提示
          Python是動態(tài)類型的,動態(tài)地為變量指定數(shù)據(jù)類型,意味著我們無需在代碼中指定數(shù)據(jù)類型。
          但有時可能會造成混淆!
          對于數(shù)據(jù)類型的靜態(tài)分配,通常使用類型提示。這是在Python 3.5中引入的。從3.5開始,我們可以指定類型,但這是比較麻煩的。
          這項更新真正改變了這一點,現(xiàn)在可以將內(nèi)置集合類型(List和Dict)用作泛型類型。
          之前,必須通過輸入來調(diào)用大寫類型List和Dict。
          ef greet_all(names: list[str]) -> None:for name in names:print("Hello",?name)
          現(xiàn)在,無需從typing.List來調(diào)用List
          新的數(shù)學(xué)函數(shù)
          數(shù)學(xué)模塊添加和改進了許多輔助功能,從對現(xiàn)有功能的改進開始。
          import math#Greatest common divisormath.gcd(80, 64, 152)#8
          以前計算最大公因數(shù)的gcd函數(shù)只能應(yīng)用于2個數(shù)字,迫使程序員在處理更多數(shù)字時必須執(zhí)行類似math.gcd(80,math.gcd(64,152))的操作。從Python 3.9開始,我們可以將其應(yīng)用于任意數(shù)字的值。
          math模塊中第一個新添加的是math.lcm函數(shù):
          #Least common multiplemath.lcm(4, 8, 5)#40
          math.lcm計算其參數(shù)的最小公倍數(shù)。與GCD一樣,它允許可變數(shù)量的參數(shù)。
          新解析器
          這部分更多是視線之外的改變,但有可能成為Python未來發(fā)展中最重大的改變之一。
          Python 3.9使用了一個新的基于PEG的解析器。以前Python使用LL(1),在構(gòu)建該語言的新功能時,PEG比LL(1)更靈活。官方文檔中表示,這種靈活性將在Python 3.10及更高版本中體現(xiàn)出來。
          ast模塊使用新的解析器,并產(chǎn)生與舊解析器相同的AST。
          IPv6范圍的地址
          Python 3.9的另一個變化是可以指定IPv6地址的范圍。IPv6范圍用于指定相應(yīng)IP地址在Internet的哪個部分有效。
          范圍可以使用%符號在IP地址的末尾指定——例如:3FFE:0:0:1:200:F8FF:FE75:50DF%2——因此該IP地址在范圍2中,即鏈接本地地址。
          因此,如果需要使用Python處理IPv6地址,現(xiàn)在可以這樣處理:
          from ipaddress import IPv6Addressaddr = IPv6Address('ff02::fa51%1')print(addr.scope_id)#"1" - interface-local IP address
          注意使用基本的Python運算符進行比較時,兩個具有不同范圍的地址是不相同的。
          新模塊
          區(qū)域信息
          zoneinfo模塊將IANA時區(qū)數(shù)據(jù)庫的支持引入標(biāo)準(zhǔn)庫。它添加了zoneinfo.ZoneInfo,這是一個由系統(tǒng)時區(qū)數(shù)據(jù)支持的具體的datetime.tzinfo實現(xiàn)。
          其他變化
          __import __()現(xiàn)在增加了ImportError以替代ValueError,通常在相對導(dǎo)入超出其頂級包時發(fā)生。
          “” .replace(“”,s,n)現(xiàn)在對于所有非零n返回s而不是空字符串。現(xiàn)在它與““ .replace(”“,s)相一致。
          默認(rèn)狀態(tài)下,Python變得更快
          Python的每個修訂版與以前的版本相比都有性能改進。Python 3.9進行了兩項重大改進,可以提高性能但無需對現(xiàn)有代碼進行任何更改。
          第一個改進更多涉及矢量調(diào)用協(xié)議的使用,通過最小化或消除臨時對象進行許多常見函數(shù)的調(diào)用。Python 3.9引入了幾個新的內(nèi)置函數(shù),包括range、tuple、set、frozenset、list、dict ——使用vectorcall可以加快執(zhí)行速度。
          Python切換到年度發(fā)布周期
          到目前為止,Python已經(jīng)以18個月的節(jié)奏進行了開發(fā)和發(fā)布。PEP 602提議Python開發(fā)團隊采用年度發(fā)布周期,并且該提議已被接受。
          結(jié)語
          隨著每個新版本的發(fā)布,Python都變得越來越快速和強大,操作常見的數(shù)據(jù)類型也變得越來越簡單。
          可能并不是所有這些更改都與大家的日常編程相關(guān),但是我認(rèn)為至少要意識到這是一件好事,因為它們可能會在某些時候派上用場。
          資源
          python.org/downloads/release/python-390a5
          docs.python.org/3.9/whatsnew/3.9.html
          --END--
          推薦閱讀
          沒有這 29 款插件的 Chrome 是沒有靈魂的
          總結(jié)了 90 條寫 Python 程序的建議

          關(guān)注「Python 知識大全」,做全棧開發(fā)工程師
          歲月有你 惜惜相處

          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲一区二区三区 | 日产一区二区三区视频 | 91福利影院 | 性爱一区2区 | 黄色A片一级 |