浅析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实现拉钩网上的FizzBuzzWhizz问题示例
May 05 Python
python实现定时播放mp3
Mar 29 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
python结合API实现即时天气信息
Jan 19 Python
使用python实现ftp的文件读写方法
Jul 02 Python
python 类之间的参数传递方式
Dec 20 Python
python中的itertools的使用详解
Jan 13 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
用python对excel查重
Dec 07 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 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+javascript实现二级级联菜单的制作
2008/05/06 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
javascript操作JSON的要领总结
2012/12/09 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
python模块导入的方法
2019/10/24 Python
django ORM之values和annotate使用详解
2020/05/19 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
毕业实习个人鉴定范文
2013/12/10 职场文书
教师个人读书活动总结
2014/07/08 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
统招统分证明
2015/06/23 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
家长会感言
2015/08/01 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
Feign调用传输文件异常的解决
2021/06/24 Java/Android