浅析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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
利用Python绘制数据的瀑布图的教程
Apr 07 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
Python之Matplotlib文字与注释的使用方法
Jun 18 Python
Python容器类型公共方法总结
Aug 19 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 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实现图片转换成ASCII码的方法
2015/04/03 PHP
PHP的几个常用加密函数
2016/02/03 PHP
php compact 通过变量创建数组
2016/11/15 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
js对象的比较
2011/02/26 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
浅谈 vue 中的 watcher
2017/12/04 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
详解vue父子组件关于模态框状态的绑定方案
2019/06/05 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
Linux中Python 环境软件包安装步骤
2016/03/31 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
利用Python优雅的登录校园网
2020/10/21 Python
世界上最好的足球商店:Unisport
2019/03/02 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
安全资料员岗位职责
2013/12/14 职场文书
毕业生自我鉴定实例
2014/01/21 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
2015年底工作总结范文
2015/05/15 职场文书
商标侵权律师函
2015/05/27 职场文书
Python源码解析之List
2021/05/21 Python
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
mysql自增长id用完了该怎么办
2022/02/12 MySQL