浅析PEP570新语法: 只接受位置参数
最近PEP570被接受了,其实要加的这个Positional-OnlyParameters原来在内置的C函数上有很多都用到了:
In:__builtin__.eval Out:In:__builtin__.len Out: In:__builtin__.divmod Out:
看它们的签名,最后都有一个/,/用途是在/左面的这些参数,只能是位置参数(不能是关键字参数):
In:divmod(3,2) Out:(1,1) In:divmod(x=3,y=2) --------------------------------------------------------------------------- TypeErrorTraceback(mostrecentcalllast)in ---->1divmod(x=3,y=2) TypeError:divmod()takesnokeywordarguments
如果使用关键字参数的方式,会报错。当然这个错有点莫名其妙。为什么要搞Positional-Only呢?就是强制使用者用位置参数!
再看一个例子(bytes):
In[68]:bytes??
Initsignature:bytes(self,/,*args,**kwargs)
Docstring:
bytes(iterable_of_ints)->bytes
bytes(string,encoding[,errors])->bytes
bytes(bytes_or_buffer)->immutablecopyofbytes_or_buffer
bytes(int)->bytesobjectofsizegivenbytheparameterinitializedwithnullbytes
bytes()->emptybytesobject
...
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可以用位置参数,也能用关键字参数。
通过PEP570,我们写的Python代码也可以支持了。你可以这样写:
defname(p1,p2,/,p_or_kw,*,kw): defname(p1,p2=None,/,p_or_kw=None,*,kw): defname(p1,p2=None,/,*,kw): defname(p1,p2=None,/): defname(p1,p2,/,p_or_kw): defname(p1,p2,/):
在Python3.8时我们就能使用这个新语法啦。现在可以通过PEP里面的几个简单例子,感受一下它的用法,期待哟
好了,就给大家介绍到这里,希望对大家有所帮助!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
热门推荐
10 祝孙辈生日祝福语简短
11 恋人跨年祝福语大全简短
12 考大学敬酒简短祝福语
13 开工投产大吉祝福语 简短
14 偶然结婚祝福语朋友简短
15 感谢学长学姐祝福语简短
16 戏精的祝福语简短
17 我要结婚祝福语简短
18 婚前女儿生日祝福语简短