千家信息网

PEP570新语法:之只接受位置参数的示例分析

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关PEP570新语法:之只接受位置参数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近 PEP 570被接受了,其实要加的这个
千家信息网最后更新 2025年01月20日PEP570新语法:之只接受位置参数的示例分析

这篇文章将为大家详细讲解有关PEP570新语法:之只接受位置参数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

最近 PEP 570被接受了,其实要加的这个Positional-Only Parameters原来在内置的C函数上有很多都用到了:

In : __builtin__.evalOut: In : __builtin__.lenOut: In : __builtin__.divmodOut: 

看它们的签名,最后都有一个/,/用途是 在/左面的这些参数,只能是位置参数(不能是关键字参数):

In : divmod(3, 2)Out: (1, 1)In : divmod(x=3, y=2)---------------------------------------------------------------------------TypeError                 Traceback (most recent call last) in ----> 1 divmod(x=3, y=2)TypeError: divmod() takes no keyword arguments

如果使用关键字参数的方式,会报错。当然这个错有点莫名其妙。为什么要搞Positional-Only呢?就是强制使用者用位置参数!

再看一个例子(bytes):

In [68]: bytes??Init signature: bytes(self, /, *args, **kwargs)Docstring:bytes(iterable_of_ints) -> bytesbytes(string, encoding[, errors]) -> bytesbytes(bytes_or_buffer) -> immutable copy of bytes_or_bufferbytes(int) -> bytes object of size given by the parameter initialized with null bytesbytes() -> empty bytes object...In : bytes('哈哈', 'utf-8')Out: b'\xe5\x93\x88\xe5\x93\x88'In : bytes('哈哈', encoding='utf-8')Out: b'\xe5\x93\x88\xe5\x93\x88'

虽然bytes也有/,但是它只约束了左边的参数(这里只有一个self),之后的encoding可以用位置参数,也能用关键字参数。

通过PEP 570,我们写的Python代码也可以支持了。你可以这样写:

def name(p1, p2, /, p_or_kw, *, kw):def name(p1, p2=None, /, p_or_kw=None, *, kw):def name(p1, p2=None, /, *, kw):def name(p1, p2=None, /):def name(p1, p2, /, p_or_kw):def name(p1, p2, /):

在 Python 3.8 时我们就能使用这个新语法啦。现在可以通过 PEP里面的几个简单例子,感受一下它的用法,期待哟

关于"PEP570新语法:之只接受位置参数的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0