这篇文章将为大家详细讲解有关PEP570新语法:之只接受位置参数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站建设、网站设计、北安网络推广、微信小程序开发、北安网络营销、北安企业策划、北安品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;成都创新互联公司为所有大学生创业者提供北安建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com最近 PEP 570被接受了,其实要加的这个Positional-Only Parameters
原来在内置的C函数上有很多都用到了:
In : __builtin__.eval Out: <function eval(source, globals=None, locals=None, /)> In : __builtin__.len Out: <function len(obj, /)> In : __builtin__.divmod Out: <function divmod(x, y, /)>
看它们的签名,最后都有一个/,/用途是 在/左面的这些参数,只能是位置参数(不能是关键字参数):
In : divmod(3, 2) Out: (1, 1) In : divmod(x=3, y=2) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-28-6668f56246b2> in <module> ----> 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) -> bytes bytes(string, encoding[, errors]) -> bytes bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer bytes(int) -> bytes object of size given by the parameter initialized with null bytes bytes() -> 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新语法:之只接受位置参数的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
文章标题:PEP570新语法:之只接受位置参数的示例分析-创新互联
文章URL:https://www.cdcxhl.com/article46/deghhg.html
成都网站建设公司_创新互联,为您提供响应式网站、网站策划、网站营销、动态网站、品牌网站建设、企业网站制作
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联