浅析PEP570新语法: 只接受位置参数


Posted in Python onOctober 15, 2019

最近 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里面的几个简单例子,感受一下它的用法,期待哟

好了,就给大家介绍到这里,希望对大家有所帮助!

Python 相关文章推荐
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
如何实现删除numpy.array中的行或列
May 08 Python
pandas 数据实现行间计算的方法
Jun 08 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
Python WSGI的深入理解
Aug 01 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
打包python 加icon 去掉cmd黑窗口方法
Jun 24 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
python 实现生成均匀分布的点
Dec 05 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
浅析PEP572: 海象运算符
Oct 15 #Python
Python 导入文件过程图解
Oct 15 #Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 #Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 #Python
Python3安装pip工具的详细步骤
Oct 14 #Python
python区分不同数据类型的方法
Oct 14 #Python
django中瀑布流写法实例代码
Oct 14 #Python
You might like
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python import自定义模块方法
2015/02/12 Python
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
python3爬取数据至mysql的方法
2018/06/26 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
味多美官网:蛋糕订购,100%使用天然奶油
2017/11/10 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
法雷奥SQA(electric)面试问题
2016/01/23 面试题
培训主管的岗位职责
2013/11/23 职场文书
如何写一份好的自荐信
2014/01/02 职场文书
高一英语教学反思
2014/01/22 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
故宫英文导游词
2015/01/31 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
详解Spring事件发布与监听机制
2021/06/30 Java/Android