浅析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 sqlobject(mysql)中文乱码解决方法
Nov 14 Python
Python的装饰器使用详解
Jun 26 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
pandas 将索引值相加的方法
Nov 15 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
Python小白不正确的使用类变量实例
May 29 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 db类库进行数据库操作
2009/03/19 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
用Python解决计数原理问题的方法
2016/08/04 Python
python实现C4.5决策树算法
2018/08/29 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
Python 下载及安装详细步骤
2019/11/04 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
python网络编程之五子棋游戏
2020/05/14 Python
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
上海奥佳笔试题面试题
2016/11/16 面试题
数控机械专业个人的自我评价
2014/01/02 职场文书
高一学生期末评语
2014/04/25 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
保安2014年终工作总结
2014/12/06 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
水浒传读书笔记
2015/06/25 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
Redis Cluster集群动态扩容的实现
2021/07/15 Redis
正则表达式拆分url实例代码
2022/02/24 Java/Android
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电
nginx之内存池的实现
2022/06/28 Servers