<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>

          Python 3.12正式發(fā)布:性能提升、no-GIL將在3.13提供

          共 3530字,需瀏覽 8分鐘

           ·

          2023-10-10 09:54

          微信改版,求求大家星標(biāo)下公眾號

          不然后面推送大家可能會看不到


          出品 | OSC開源社區(qū)(ID:oschina2013)

          Python 3.12.0 近日正式發(fā)布穩(wěn)定版。


          主要變化

          • 更靈活的 f-string 解析 (PEP 701)

          • 支持 buffer 協(xié)議 (PEP 688)

          • 引入新的 debugging/profiling API (PEP 669)

          • 支持具有單獨(dú)全局解釋器鎖的獨(dú)立子解釋器 (PEP 684)

          • 優(yōu)化性能,例如 PEP 709 和對 BOLT 二進(jìn)制優(yōu)化器的支持,預(yù)計總體性能提高 5%

          • 改進(jìn)錯誤信息

          • 支持 Linux perf 分析器在跟蹤過程中報告 Python 函數(shù)名稱

          類型注釋

          • 為泛型類引入新的類型注釋語法 (PEP 695)

          • 為方法引入新的 override 裝飾器 (PEP 698)



          下面簡單介紹值得關(guān)注的變化:


          更靈活的 f-string 解析 (PEP 701)

          新版取消了最初制定 f-strings 時制定的一些限制。經(jīng)過這些變化,使得 f-strings 更加統(tǒng)一,成為一種可以直接整合到解析器中的正式化語法。這將會為終端用戶和庫開發(fā)者帶來較大優(yōu)勢,同時也大大降低用于解析 f-strings 代碼的維護(hù)成本。

          最初設(shè)置 f-strings 限制是為了能夠在不修改現(xiàn)有詞法分析器的情況下將 f-strings 的解析實現(xiàn)到 CPython 中。但目前來看,這些限制反而帶來了復(fù)雜性。比如:

          1. 在表達(dá)式部分中,無法使用引號字符來界定 f-strings

            >>> f'Magic wand: { bag['wand'] }'
            ^
            SyntaxError: invalid syntax
          2. 之前考慮過的一種解決方法會導(dǎo)致在執(zhí)行的代碼中出現(xiàn)轉(zhuǎn)義序列,這在 f-strings 中是被禁止的:

            >>> f'Magic wand { bag[\'wand\'] } string'
            SyntaxError: f-string expression portion cannot include a backslash
          3. f-strings 中無法使用注釋語法:

            >>> f'''A complex trick: {
            ... bag['
            bag'] # recursive bags!
            ... }'''

            SyntaxError: f-string expression part cannot include '#'
          4. 許多其它語言表達(dá)式字符串插值都支持不擴(kuò)展轉(zhuǎn)義序列的任意嵌套。比如:

            # Ruby
            "#{ "#{1+2}" }"

            # JavaScript
            `${`${1+2}`}`

            # Swift
            "\("\(1+2)")"

            # C#
            $"{$"{1+2}"}"

          Python 團(tuán)隊意識到,從語言用戶的角度來看,這些限制沒有任何意義,所以他們目前通過賦予 f-strings 字面量一個沒有例外的常規(guī)語法,并使用專用的解析代碼來實現(xiàn)它,從而消除這些限制。

          f-strings 的另一個問題是,CPython 中的當(dāng)前實現(xiàn)依賴于將 f-strings 標(biāo)記化為 STRING 令牌,并對這些令牌進(jìn)行后處理。這帶來了以下問題:

          1. 它給 CPython 解析器增加了相當(dāng)大的維護(hù)成本。這是因為解析代碼需要手動編寫,這在歷史上導(dǎo)致了大量的不一致性和錯誤。在 C 中手動編寫和維護(hù)解析代碼一直被認(rèn)為是容易出錯和危險的,因為它需要處理大量的原始詞法分析器緩沖區(qū)上的手動內(nèi)存管理。

          2. f-strings 解析代碼無法使用新的 PEG 解析器所允許的新錯誤消息機(jī)制,這些錯誤消息帶來的改進(jìn)已經(jīng)受到了熱烈歡迎,但因為 f-strings 用的是獨(dú)立解析器,所以無法使用上新改進(jìn)的錯誤消息機(jī)制。另外,因為 f-strings 有幾個語法特性可能會因為在表達(dá)式部分內(nèi)部發(fā)生的不同隱式標(biāo)記化而令人困惑(例如 f"{y:=3}" 并不是一個賦值表達(dá)式)

          3. 其它 Python 實現(xiàn)無法知道它們是否正確實現(xiàn)了 f-strings,因為它們并不是官方 Python 語法的一部分。這一點(diǎn)很重要,因為有幾個知名的替代實現(xiàn)正在使用 CPython 的 PEG 解析器,如 PyPy。f-strings 使用一個獨(dú)立的解析器,阻止了這些替代實現(xiàn)利用官方語法,以及從改進(jìn)的錯誤消息機(jī)制中受益。

          期待新 f-strings 能用得更順心。

          給每個子解釋器創(chuàng)建 GIL (PEP 684)

          PEP-684 由“香農(nóng)計劃”的作者 Eric Snow 提出,主要是給每個子解釋器創(chuàng)建 GIL,允許 Python 實現(xiàn)真正的并行處理。

          說到并行處理,目前 Python 3.12 尚未引入「no-GIL 構(gòu)建」。

          按照計劃,Python 團(tuán)隊會在 Python 3.13 中將 no-GIL 構(gòu)建添加為實驗性構(gòu)建模式。

          相關(guān)鏈接
          • https://www.python.org/downloads/release/python-3120/
          • https://pythoninsider.blogspot.com/2023/10/python-3120-final-now-available.html



          --END--

                  
                  

          數(shù)據(jù)分析從零開始實戰(zhàn)

          數(shù)據(jù)分析從零開始實戰(zhàn) | 基礎(chǔ)篇(一)

          數(shù)據(jù)分析從零開始實戰(zhàn) | 基礎(chǔ)篇(二)

          數(shù)據(jù)分析從零開始實戰(zhàn) | 基礎(chǔ)篇(三)

          數(shù)據(jù)分析從零開始實戰(zhàn) | 基礎(chǔ)篇(四)


          2小時快速掌握Python基礎(chǔ)知識要點(diǎn)

          Python小知識 | 這些技能你不會?(一)

          Python小知識 | 這些技能你不會?(二)

          Python小知識 | 這些技能你不會?(三)

          Python小知識 | 這些技能你不會?(四)


          掃碼回復(fù):python,一起學(xué)習(xí)

          瀏覽 728
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  三级日本三级网站三级网站在线 | 亚洲性爱操逼大片 | 三级视频网站在线观看 | 日韩综合网站 | 国产精品乱码一区二区 |