Python的关键字参数与斜杠“/”
2022-05-20 20:25
1191 查看
Python3.8 新增了一种语法,可以使用斜杠
/占据一个参数的位置,表示在此之前的参数都只接受位置参数的传参形式。
例如,对以下函数声明:
def func(a, b, /, c, d, *, e, f): pass
那么参数
a和
b都只能以位置参数的形式传入,参数
e和
f都只能以关键字参数的形式传入,而
c和
d则不受限制,可以按任意形式传入参数。因此,调用该函数时,前两个参数必定代表
a和
b,并且必定存在
e=...和
f=...的关键字参数。
如果查阅 Python 内置函数
divmod()的帮助,可以看到:
>>> help(divmod) Help on built-in function divmod in module builtins: divmod(x, y, /) Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
这表明
divmod()的两个参数都只支持按位置形式传参的方法。
除此之外,斜杠
/还可以用作区分普通的关键字参数与可变关键字参数,考虑以下函数定义:
def func(name, **kw): print(name, kw)
那么以下调用:
func('hello', name='world') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: func() got multiple values for argument 'name'
是错误的,因为 Python 解释器会认为参数
name既当位置参数使用,又当关键字参数使用,还没有处理到可变参数
**kw,就会直接引发异常。
但如果在定义函数时,在两者之间加上一个斜杠
/占据的参数位置,那么参数
name就只能当位置参数使用,此时再次以同样方式调用函数,就不会发生歧义了:
>>> def func(name, /, **kw): ... print(name, kw) ... >>> func('hello', name='world') hello {'name': 'world'}
这样,参数传递时
name='world'只能被解释为关键字参数,正好被可变参数
**kw接纳。
相关文章推荐
- Python:解决Matplotlib保存图片显示不全问题
- python常用标准库(math数学模块和random随机模块)
- Python:用Pandas输出格式化HTML并高亮
- python生成器
- 【Azure 环境】【Azure Developer】使用Python代码获取Azure 中的资源的Metrics定义及数据
- Python:conda install 和pip install的区别
- 探索 Python/Django 支持分布式多租户数据库,如 Postgres+Citus
- python常用内置函数和关键字
- Python技法:实用运维脚本编写(进程/文件/目录操作)
- Python推导式
- Python 散列表查询_进入<哈希函数>为结界的世界
- SICP 2.2: 层次性数据和闭包性质(Python实现)
- python+pytest接口自动化(15)-日志管理模块loguru简介
- 车辆跟随滑模控制的python实现
- [ Python ] PyQt5 PySide2 笔记
- Python 函数进阶-递归函数
- Python技法:实现简单的递归下降Parser
- python数据可视化-matplotlib入门(5)-饼图和堆叠图
- Python 树表查找_千树万树梨花开,忽如一夜春风来(二叉排序树、平衡二叉树)
- Python 函数进阶-高阶函数