Python最新版本3.8釋出,這個版本加入了之前引爆社群論戰的指派表示式:=(Assignment Expressions),以及一個新的函式參數語法/,用於Python函式定義中指定僅位置參數(Positional-only Parameters),另外,現在除錯版本與正式發布版本,使用相同的ABI。

去年中Python社群爆發論戰,就是為了這個在Python 3.8加入的指派表示式:=,由於指派表示式符號很像海象臉部的長牙跟眼睛,因此又被稱為海象運算子(The Walrus Operator)。這個運算子可讓開發者在表示式中進行指派,撰寫出if (n := len(a)) > 10:這樣的程式碼,在這個例子中,指派表示式能夠避免函式len()被呼叫兩次,使得程式碼整體更簡潔,而且因爲開發者可以少寫很多程式碼,進而提升程式開發速度。

指派表示式在不少開發語言中都有提供,但當初PEP 572被提出時,引來了支持與反對兩方激烈論戰,甚至有反對方激烈地表達不會在任何程式碼中使用這個新語法,由於雙方僵持不下,最後由被稱為仁慈的獨裁者(Benevolent Dictator For Life,BDFL)的Python之父Guido van Rossum介入,並接受PEP 572。

而經過PEP 572之後,Guido van Rossum也卸除BDFL的職務,但是BDFL的職務便是要在Python社群無法做出決定時,對分歧進行最後的裁決,一旦沒有BDFL,則社群可能會有部分事物無法有效率的解決,因此在去年底Python社群決定轉採用指導委員會管理模式,由委員會成員來填補Python社群決策角色的空缺。

另外,Python 3.8還加入了一個新的函式參數語法/,用來指定僅位置參數,僅位置參數的特性需要指定位置,且不能用作關鍵字參數。Python僅位置參數PEP 570提案者Larry Hastings提到,僅位置參數沒有外部可用名稱,當接受僅位置參數的函式被呼叫時,位置參數是根據順序映射到這些參數上,而當函式庫作者在設計API的時候,會試著確保API被使用的時候,能夠依照正確且預期的方式,但是由於無法指定函式中哪些參數為僅位置參數時,函式庫作者也必須在選擇參數名稱時非常小心。

過去僅位置參數只存在Python的內建函式中,而在這個最新的Python版本,開發者也能夠使用僅位置參數,不只讓函式庫開發者能以更好的表達方式呈現API的使用方式,也可以讓Python既有的文件和行為更加一致。

在這個Python版本,無論是發布模式還是除錯模式,Python現在都使用相同的ABI(Application Binary Interface)。在Unix上,當Python以除錯模式進行建置時,現在可以載入發布模式的C擴充套件和穩定的ABI,因此現在程式正式發布版本與除錯版本為ABI相容。

這個版本的Python/C API加入了一個暫時的Vectorcall協定,目的是形式化現有的在不同類別中的最佳化,任何擴充類型要實作可呼叫的功能,都可以使用這個協定。Vectorcall協定在Python 3.9會正式公開發布。


Advertisement

更多 iThome相關內容