浅析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安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
python 采集中文乱码问题的完美解决方法
Sep 27 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
python+matplotlib绘制饼图散点图实例代码
Jan 20 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
实例介绍Python中整型
Feb 11 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
Python OpenCV实现视频分帧
Jun 01 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 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的栏目导航程序
2006/10/09 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
原生js实现自定义消息提示框
2020/11/19 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
Python列表推导式实现代码实例
2020/09/09 Python
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
门诊挂号室室长岗位职责
2013/11/27 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
党员个人公开承诺书
2014/08/29 职场文书
二手房购房意向书
2015/05/09 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript