浅析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 30 Python
python脚本设置系统时间的两种方法
Feb 21 Python
Python二叉搜索树与双向链表转换实现方法
Apr 29 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
python中bytes和str类型的区别
Oct 21 Python
python实现简单井字棋小游戏
Mar 05 Python
pyspark 随机森林的实现
Apr 24 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
python迷宫问题深度优先遍历实例
Jun 20 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
初品cakephp 入门基础
2012/02/16 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
js实现双色球效果
2020/08/02 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python数据封装json格式数据
2018/03/04 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
python变量的存储原理详解
2019/07/10 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
.net面试题
2015/12/22 面试题
文史专业毕业生自荐信
2013/11/17 职场文书
优秀团支部事迹材料
2014/02/08 职场文书
小学生家长评语大全
2014/02/10 职场文书
ktv筹备计划书
2014/05/03 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
2014年司法局工作总结
2014/12/11 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android