当前位置:   article > 正文

【Python入门教程】第60篇 函数进阶之可变关键字参数_python中获取可变数量的关键字传参名字

python中获取可变数量的关键字传参名字

本篇我们学习 Python 可变关键字参数(**kwargs)的概念和作用。

可变关键字参数

在 Python 中,函数的参数前面可以使用两个星号(**)作为前缀,例如 **kwwargs。这种参数被称为关键字参数(keyword parameter)。

当函数包含 **kwargs 参数时,它可以接受数量可变的关键字参数,这些参数组成了一个字典。

按照惯例,这种参数的名字通常使用 kwargs。不过,我们也可以使用其他任何有意义的名字,例如 **configs 或者 **files。

以下示例中的函数 connect() 定义了一个可变关键字参数 **kwargs:

def connect(**kwargs):
    print(type(kwargs))
    print(kwargs)
  • 1
  • 2
  • 3

下面的代码调用了该函数,打印了一个空的字典:

connect()
<class 'dict'>
{}
  • 1
  • 2
  • 3

以上示例中,我们没有传递任何参数到 connect() 函数,因此 kwargs 时一个空字典。

以下示例调用 connect() 函数时传递了一些关键字参数:

connect(server='localhost', port=3306, user='root', password='Py1hon!Xt')
  • 1

输出结果如下:

<class 'dict'>
{'server': 'localhost', 'port': 3306, 'user': 'root', 'password': 'Py1hon!Xt'}
  • 1
  • 2

在 connect() 函数内部,我们可以将 kwargs 参数当作一个字典使用。

如果我们想要将一个字典传递给该函数,需要在实参前面加上两个星号,例如:

def connect(**kwargs):
    print(kwargs)


config = {'server': 'localhost',
        'port': 3306,
        'user': 'root',
        'password': 'Py1thon!Xt12'}

connect(**config)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如果函数同时包含 **kwargs 参数和其他参数,需要将 **kwargs 参数放在其他参数之后。否则,将会返回一个错误。下面的 connect() 函数定义是正确的:

def connect(fn, **kwargs):
    print(kwargs)
  • 1
  • 2

但是,以下函数定义将会返回 SyntaxError 错误:

def connect(**kwargs, fn):
    print(kwargs)
SyntaxError: invalid syntax
  • 1
  • 2
  • 3

可变参数与可变关键字参数

以下函数同时包含了可变参数(*args)以及可变关键字参数(**kwargs):

def fn(*args, **kwargs):
    print(args)
    print(kwargs)
  • 1
  • 2
  • 3

函数 fn 可以接受数量可变的位置参数,Python 会将这些参数打包成一个元组后将其赋值给 args 参数。同时,函数 fn 也可以接受数量可变的关键字参数,Python 会将这些参数打包成一个字典后将其赋值给 kwargs 参数。例如:

fn(1, 2, x=10, y=20)
  • 1

输出结果如下:

(1, 2)
{'x': 10, 'y': 20}
  • 1
  • 2

总结

  • Python 可变关键字参数(**kwargs)允许函数接受数量可变的关键字参数。
  • 在函数内部,kwargs 参数是一个字典,包含了由所有关键字参数名称和值组成的键值对。
  • 将字典传递给 **kwargs 参数之时需要在字典名称前加上两个星号。
  • 定义函数时,**kwargs 参数只能出现在参数列表的最后,否则将会返回语法错误。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/71142
推荐阅读
相关标签
  

闽ICP备14008679号