浅析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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
python导入模块交叉引用的方法
Jan 19 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
python使用协程实现并发操作的方法详解
Dec 27 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
Numpy 多维数据数组的实现
Jun 18 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
python解决12306登录验证码的实现
Apr 18 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读写文件的方法(生成HTML)
2006/11/27 PHP
php中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
FCKeditor添加自定义按钮
2008/03/27 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
如何能分清npm cnpm npx nvm
2019/01/17 Javascript
python定时执行指定函数的方法
2015/05/27 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
pandas取出重复数据的方法
2019/07/04 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
师范毕业生自荐信
2013/10/17 职场文书
工业设计专业个人求职信范文
2013/12/28 职场文书
上班离岗检讨书
2014/01/27 职场文书
付款委托书范本
2014/04/04 职场文书
二手房买卖协议书
2014/04/10 职场文书
小学教师评语大全
2014/04/23 职场文书
吨的认识教学反思
2014/04/27 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
预备党员个人总结
2015/02/14 职场文书
《我是什么》教学反思
2016/02/16 职场文书
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技
Redis基本数据类型List常用操作命令
2022/06/01 Redis