<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    Python3.12正式發(fā)布了

    共 3250字,需瀏覽 7分鐘

     ·

    2023-10-06 11:56

    文章來源 :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 和對(duì) BOLT 二進(jìn)制優(yōu)化器的支持,預(yù)計(jì)總體性能提高 5%

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

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

    類型注釋

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

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


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

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

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

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

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

      >>> f'Magic wand: { bag['wand'] }'
      ^
      SyntaxError: invalid syntax
    2. 之前考慮過的一種解決方法會(huì)導(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 中無法使用注釋語(yǔ)法:

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

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

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

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

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

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

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

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

    1. 它給 CPython 解析器增加了相當(dāng)大的維護(hù)成本。這是因?yàn)榻馕龃a需要手動(dòng)編寫,這在歷史上導(dǎo)致了大量的不一致性和錯(cuò)誤。在 C 中手動(dòng)編寫和維護(hù)解析代碼一直被認(rèn)為是容易出錯(cuò)和危險(xiǎn)的,因?yàn)樗枰幚泶罅康脑荚~法分析器緩沖區(qū)上的手動(dòng)內(nèi)存管理。

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

    3. 其它 Python 實(shí)現(xiàn)無法知道它們是否正確實(shí)現(xiàn)了 f-strings,因?yàn)樗鼈儾⒉皇枪俜?Python 語(yǔ)法的一部分。這一點(diǎn)很重要,因?yàn)橛袔讉€(gè)知名的替代實(shí)現(xiàn)正在使用 CPython 的 PEG 解析器,如 PyPy。f-strings 使用一個(gè)獨(dú)立的解析器,阻止了這些替代實(shí)現(xiàn)利用官方語(yǔ)法,以及從改進(jìn)的錯(cuò)誤消息機(jī)制中受益。

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

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

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

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

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

       
       

    會(huì)員社群

    微信咨詢:coderv5




    推薦閱讀:

    入門: 最全的零基礎(chǔ)學(xué)Python的問題  | 零基礎(chǔ)學(xué)了8個(gè)月的Python  | 實(shí)戰(zhàn)項(xiàng)目 |學(xué)Python就是這條捷徑


    干貨:爬取豆瓣短評(píng),電影《后來的我們》 | 38年NBA最佳球員分析 |   從萬(wàn)眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個(gè)海量小姐姐素描圖 |碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


    趣味:彈球游戲  | 九宮格  | 漂亮的花 | 兩百行Python《天天酷跑》游戲!

    AI: 會(huì)做詩(shī)的機(jī)器人 | 給圖片上色 | 預(yù)測(cè)收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


    小工具: Pdf轉(zhuǎn)Word,輕松搞定表格和水??! | 一鍵把html網(wǎng)頁(yè)保存為pdf!|  再見PDF提取收費(fèi)! | 用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換 | 制作一款釘釘?shù)蛢r(jià)機(jī)票提示器! |60行代碼做了一個(gè)語(yǔ)音壁紙切換器天天看小姐姐!

    瀏覽 361
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    av777 | 国产免费观看黄色电影 | 久久久婷婷 | 【乱子伦】露脸50 | 久草综合视频 |