python笔记 可变参数补充

134 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

0 环境

  • 编辑器:idea或vscode
  • 系统版本:windows10
  • python版本:3.9.6

1 位置可变参数和关键字可变参数

假如留意观察的话,我们会经常看到很多人用下面的方式,解决可变参数的问题。

image.png

之前已经记录了鱼和熊掌两种可变参数的使用操作,现在呢,我想鱼和熊掌兼得之,可以吗,在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")

image.png

两种可变参数混合的规则和之前的一样,位置参数和关键字参数混用类似,先位置,后关键字。

位置可变参数和关键字可变参数混合使用的时候,可变位置参数一定要在前。 image.png

经常会看到一种,普通参数和它们一起使用的场景。如下代码:

image.png

常见的报错问题: flag是一个普通变量,然后关键字又使用flag了,解析器不知道该给谁了。

image.png

如下:这种关键字传入是可以的。 image.png

普通参数在可变位置参数的后面,fn(*args, x),不用关键字传入的话,前面所有的值都被arg了接收,而x没有,就会报错。当然你可以给x加一个默认值,避免这个问题。那么还有一种情况,当格式是:fn(x=12, *args),我一旦调用它,x的默认值不生效了,这种情况适合下,普通变量放在后面。

image.png

普通参数在可变关键字参数的后面,不用看了,直接定义就不通过。只能普通参数在它的前面使用,哪怕普通参数它有默认值,因为是关键字也是不影响的。