传递任意数量的(关键字)实参
文章目录
当谈到在Python中传递任意数量的实参时,我们可以使用两种技术:结合使用位置实参和任意数量实参,以及使用任意数量的关键字实参。
任意数量实参(Arbitrary Number of Arguments):
任意数量实参指的是一个函数可以接受不确定数量的位置实参。在函数定义中,我们可以使用一个星号(*)来表示这样的参数。当函数被调用时,所有传递给函数的额外位置参数都被收集到一个元组中。
任意数量的关键字实参(Arbitrary Number of Keyword Arguments):
任意数量的关键字实参指的是一个函数可以接受不确定数量的关键字参数。在函数定义中,我们使用两个星号(**)来表示这样的参数。当函数被调用时,所有传递给函数的额外关键字参数都被收集到一个字典中。
1. 结合使用位置实参和任意数量实参:
有时我们希望定义一个函数,它可以接受任意数量的实参,同时还需要处理一些位置参数。在这种情况下,我们可以将位置参数放在函数定义中,并使用星号(*)来表示接受任意数量的实参。
下面是一个例子:
def make_pizza(size, *toppings):
"""制作披萨"""
print(f"制作一个{size}寸的披萨,配料如下:")
for topping in toppings:
print(f"- {topping}")
# 调用函数
make_pizza(12, '蘑菇', '青椒', '火腿')
在上面的例子中,函数make_pizza()
有一个位置参数size
和一个任意数量的实参toppings
。当我们调用函数时,size
参数接受了值12
,而剩余的参数'蘑菇', '青椒', '火腿'
被收集到一个元组tappings
中。函数的输出如下:
制作一个12寸的披萨,配料如下:
- 蘑菇
- 青椒
- 火腿
这样,我们可以传递任意数量的配料给函数,并将它们存储在tappings
中。
2. 使用任意数量的关键字实参:
除了接受任意数量的位置实参,Python还允许我们接受任意数量的关键字实参。我们可以在函数定义中使用两个星号(**)来表示这样的参数。
下面是一个例子:
def build_profile(first_name, last_name, **user_info):
"""创建用户资料字典"""
profile = {}
profile['first_name'] = first_name
profile['last_name'] = last_name
for key, value in user_info.items():
profile[key] = value
return profile
# 调用函数
user_profile = build_profile('张', '三', age=25, city='北京', occupation='工程师')
print(user_profile)
在上面的例子中,函数build_profile()
有两个位置参数first_name
和last_name
,以及一个任意数量的关键字参数user_info
。当我们调用函数时,位置参数被传递为'张'
和'三'
,而关键字参数被收集到字典user_info
中。函数的输出如下:
{'first_name': '张', 'last_name': '三', 'age': 25, 'city': '北京', 'occupation': '工程师'}
这样,我们可以传递任意数量的关键字参数给函数,并将它们存储在
字典user_info
中。
总结一下,结合使用位置实参和任意数量实参可以接受任意数量的位置实参,而使用任意数量的关键字实参可以接受任意数量的关键字参数。这两种技术使得函数更加灵活,能够适应不同的调用方式和参数数量。