持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
0 环境
- 编辑器:idea或vscode
- 系统版本:windows10
- python版本:3.9.6
1 位置可变参数和关键字可变参数
假如留意观察的话,我们会经常看到很多人用下面的方式,解决可变参数的问题。
之前已经记录了鱼和熊掌两种可变参数的使用操作,现在呢,我想鱼和熊掌兼得之,可以吗,在python中是可以的。
def mixed_use(*args, **kwargs):
print(f"args = {args}")
print(f"kwargs = {kwargs}")
if __name__ == '__main__':
mixed_use(1,2,3,4, a = "a", b = "b")
两种可变参数混合的规则和之前的一样,位置参数和关键字参数混用类似,先位置,后关键字。
位置可变参数和关键字可变参数混合使用的时候,可变位置参数一定要在前。
经常会看到一种,普通参数和它们一起使用的场景。如下代码:
常见的报错问题: flag是一个普通变量,然后关键字又使用flag了,解析器不知道该给谁了。
如下:这种关键字传入是可以的。
普通参数在可变位置参数的后面,fn(*args, x),不用关键字传入的话,前面所有的值都被arg了接收,而x没有,就会报错。当然你可以给x加一个默认值,避免这个问题。那么还有一种情况,当格式是:fn(x=12, *args),我一旦调用它,x的默认值不生效了,这种情况适合下,普通变量放在后面。
普通参数在可变关键字参数的后面,不用看了,直接定义就不通过。只能普通参数在它的前面使用,哪怕普通参数它有默认值,因为是关键字也是不影响的。