*args
和 **kwargs
都是用来处理函数参数的特殊语法,它们允许函数接受任意数量的位置参数(args)和关键字参数(kwargs)。下面是它们的主要区别:
位置参数和关键字参数:
当你不确定你的函数会接受多少个参数时,可以使用*args。这时,无论你收到多少参数,都会被视为一个元组。
当你不知道你的函数可能会接收多少关键字参数时,你可以使用 **kwargs
。这时,无论多少个关键字参数都会被视为一个字典。
在函数定义中的语法:
*args
:在函数定义中,它应该放在所有其他参数的后面,且前面带有一个 *
。
**kwargs
:在函数定义中,它应该放在所有其他参数的后面,且前面带有两个 **
。
使用案例:
1,
def print_arguments(*args, **kwargs):
print(sum(args))
for key, value in kwargs.items():
print(f"Keyword argument: {key}={value}")
result = print_arguments(1, 2, 3, name="Alice", age=25)
print(result)
结果:
2,装饰器接受不定长度的参数
def my_decoder(func):
def wrapper(*args,**kwargs):
print("这是一个装饰器")
func(*args,**kwargs)
return wrapper
@my_decoder
def my_func1(x):
y=x*2
print(y)
@my_decoder
def my_func2(x,y):
z=x+y
print(z)
if __name__=="__main__":
test=my_func1(3)
test=my_func2(3,7)
结果