浅析PEP570新语法: 只接受位置参数
作者:小明 时间:2022-12-22 09:36:28
最近 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里面的几个简单例子,感受一下它的用法,期待哟
好了,就给大家介绍到这里,希望对大家有所帮助!
来源:https://zhuanlan.zhihu.com/p/64246881
标签:PEP570,语法,参数
0
投稿
猜你喜欢
python脚本框架webpy的url映射详解
2021-10-27 18:55:05
FireScope-面向Web开发者和设计者的参考手册
2009-03-22 15:35:00
python wsgiref源码解析
2023-10-20 10:56:27
asp 去掉html中的table正则代码函数
2011-04-06 10:48:00
Pycharm搭建一个Django项目的方法步骤
2022-04-12 12:46:41
python开发的自动化运维工具ansible详解
2022-12-11 08:40:00
MS SQL 查询数据在数据库中所在行
2009-04-26 19:36:00
Python简单遍历字典及删除元素的方法
2021-12-31 08:57:51
python实现简易五子棋游戏(控制台版)
2022-01-14 14:38:30
python3+selenium自动化测试框架详解
2022-01-29 18:26:01
php连接不上mysql但mysql命令行操作正常的解决方法
2023-11-18 20:02:43
pytest-fixture简介及其用法讲解
2023-02-13 19:27:25
php相当简单的分页类
2023-11-17 01:50:36
Python的函数的一些高阶特性
2022-06-04 15:06:28
Asp无组件生成缩略图
2007-10-26 12:08:00
浅谈Python小波分析库Pywavelets的一点使用心得
2023-03-11 22:55:23
oracle的nvl函数的使用介绍
2023-07-19 14:42:20
ASP在线升级类文件源码
2008-10-10 13:09:00
善用用户反馈——浅谈用户反馈数据的处理
2010-07-09 16:58:00
构建成功web应用的十项黄金法则
2010-09-17 19:11:00