在Python中,参数解包(Argument Unpacking)允许你将一个序列(如列表或元组)或映射(如字典)中的值用作函数调用的参数。这可以通过使用*
(星号)或**
(双星号)操作符来实现。
位置参数解包(Positional Argument Unpacking)
位置参数解包使用*
操作符,它可以将列表、元组或其他可迭代对象中的元素解包为位置参数。
def greet(name, age):
print(f"Hello, my name is {name} and I am {age} years old.")
# 创建一个包含要传递给greet函数的值的元组
person_info = ('Alice', 30)
# 使用*操作符解包元组,并将元素作为位置参数传递给greet函数
greet(*person_info)
输出:
Hello, my name is Alice and I am 30 years old.
关键字参数解包(Keyword Argument Unpacking)
关键字参数解包使用**
操作符,它可以将字典中的键值对解包为关键字参数。
def greet(name, age):
print(f"Hello, my name is {name} and I am {age} years old.")
# 创建一个包含要传递给greet函数的键值对的字典
person_info = {
'name': 'Bob', 'age': 25}
# 使用**操作符解包字典,并将键值对作为关键字参数传递给greet函数
greet(**person_info)
输出:
Hello, my name is Bob and I am 25 years old.
混合使用
你也可以在同一个函数调用中同时使用位置参数解包和关键字参数解包:
def greet(greeting, name, age):
print(f"{greeting}, my name is {name} and I am {age} years old.")
# 位置参数和关键字参数解包
positional_args = ('Hello',)
keyword_args = {
'name': 'Charlie', 'age': 35}
# 调用函数时混合使用*和**
greet(*positional_args, **keyword_args)
输出:
Hello, my name is Charlie and I am 35 years old.
注意,在函数定义中,位置参数必须出现在关键字参数之前。在函数调用时,位置参数解包(使用*
)也必须出现在关键字参数解包(使用**
)之前。