首页 >后端开发 >Python教程 >*args 和 kwargs 在 Python 函数定义和调用中如何工作?

*args 和 kwargs 在 Python 函数定义和调用中如何工作?

Barbara Streisand
Barbara Streisand原创
2024-12-26 05:17:12794浏览

Python 函数中的

How do *args and kwargs Work in Python Function Definitions and Calls?

* 和 Python 函数中的参数

在 Python 中,*(双星/星号)和 (星号) /星号)函数定义和调用中的符号在处理变量中起着至关重要的作用

**kwargs

语法

def foo(x, y, **kwargs):
    pass

表示函数 foo 可以接受任意数量的关键字参数。这些关键字参数被收集到一个名为 kwargs 的字典中。例如:

def bar(**kwargs):
    for a in kwargs:
        print(a, kwargs[a])

# Call the function
bar(name='one', age=27)
# Output:
# name one
# age 27

*args

类似地,语法

def foo(x, y, *args):
    pass

允许函数 foo 接受任意数量的位置参数。这些参数被收集到一个名为 args 的元组中。

def foo(*args):
    for a in args:
        print(a)

# Call the function
foo(1)
# Output: 1

foo(1, 2, 3)
# Output: 1
# Output: 2
# Output: 3

* 组合

*kwargs 和 args 可以一起使用允许固定参数和可变参数。例如:

def foo(kind, *args, bar=None, **kwargs):
    print(kind, args, bar, kwargs)

# Call the function
foo(123, 'a', 'b', apple='red')
# Output: 123 ('a', 'b') None {'apple': 'red'}

扩展可迭代解包

* 符号也可用于在调用函数时解包参数列表。例如:

def foo(bar, lee):
    print(bar, lee)

# Create a list
baz = [1, 2]

# Call the function using unpacking
foo(*baz)
# Output: 1 2

注意:仅位置参数 (Python 3.8 )

在 Python 3.8 及更高版本中,可以通过使用在函数定义中指定仅位置参数* 常规参数前的符号:

def func(arg1, arg2, arg3, *, kwarg1, kwarg2):
    pass

该函数只能接受三个位置参数,任何附加参数都必须传递作为关键字参数。

kwargs 的插入顺序

在 Python 3.6 及更高版本中,关键字参数的顺序保留在 kwargs 字典中。这在某些情况下很有用,例如当您需要维护传递给函数的参数的顺序时。

以上是*args 和 kwargs 在 Python 函数定义和调用中如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn