APP下载

Python 3.8释出加入指派表示式,可在表示式中进行指派

消息来源:baojiabao.com 作者: 发布时间:2024-05-07

报价宝综合消息Python 3.8释出加入指派表示式,可在表示式中进行指派

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会正式公开发布。

2019-10-15 16:49:00

相关文章