浅析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 15 Python
Python实现二维有序数组查找的方法
Apr 27 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
python实现决策树分类算法
Dec 21 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
python常用函数与用法示例
Jul 02 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
Python字符串的修改方法实例
Dec 19 Python
详解Flask前后端分离项目案例
Jul 24 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
Python 如何解决稀疏矩阵运算
May 26 Python
Elasticsearch 数据类型及管理
Apr 19 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
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
关于Python中异常(Exception)的汇总
2017/01/18 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
如何使用python切换hosts文件
2020/04/29 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
三星英国官网:Samsung英国
2018/09/25 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
仓库保管员岗位职责
2013/12/20 职场文书
个人简历自我评价
2014/01/06 职场文书
单位办理社保介绍信
2014/01/10 职场文书
春节联欢会主持词
2014/03/24 职场文书
质量承诺书格式
2014/05/20 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
外科护士长工作总结
2015/08/12 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android
MySQL池化框架学习接池自定义
2022/07/23 MySQL