推荐答案
def example_function(arg1, arg2, *args, **kwargs): print(f"arg1: {arg1}") print(f"arg2: {arg2}") print(f"*args: {args}") print(f"**kwargs: {kwargs}") # 调用函数 example_function(1, 2, 3, 4, 5, key1="value1", key2="value2")
输出:
arg1: 1 arg2: 2 *args: (3, 4, 5) **kwargs: {'key1': 'value1', 'key2': 'value2'}
本题详细解读
*args 的作用
*args
用于将不定数量的非关键字参数传递给函数。- 在函数定义中,
*args
会将所有额外的非关键字参数打包成一个元组(tuple)。 - 例如,在
example_function(1, 2, 3, 4, 5)
中,3, 4, 5
会被打包成元组(3, 4, 5)
并传递给args
。
**kwargs 的作用
**kwargs
用于将不定数量的关键字参数传递给函数。- 在函数定义中,
**kwargs
会将所有额外的关键字参数打包成一个字典(dictionary)。 - 例如,在
example_function(key1="value1", key2="value2")
中,key1="value1"
和key2="value2"
会被打包成字典{'key1': 'value1', 'key2': 'value2'}
并传递给kwargs
。
函数定义中的应用
- 在函数定义时,
*args
和**kwargs
可以同时使用,但*args
必须出现在**kwargs
之前。 - 这种定义方式使得函数可以接受任意数量的参数,增强了函数的灵活性。
函数调用中的应用
- 在函数调用时,
*args
和**kwargs
可以用于解包参数。 - 例如,
args = (3, 4, 5)
和kwargs = {'key1': 'value1', 'key2': 'value2'}
,可以通过example_function(1, 2, *args, **kwargs)
来调用函数,效果与直接传递参数相同。
总结
*args
用于处理非关键字参数,打包成元组。**kwargs
用于处理关键字参数,打包成字典。- 两者结合使用可以使函数更加灵活,适应不同的参数需求。