*args可变位置参数1.1 基本用法*args允许函数接受任意数量的位置参数。在函数内部args是一个元组(tuple)包含所有传入的位置参数。12345678defsum_all(*args):result0fornuminargs:resultnumreturnresultprint(sum_all(1,2,3))# 输出: 6print(sum_all(10,20))# 输出: 301.2 *args的本质实际上*args中的args只是一个约定俗成的名字。重要的是前面的*符号。1234567defshow_params(*numbers):print(f类型: {type(numbers)})print(f内容: {numbers})show_params(1,2,3)# 类型: class tuple# 内容: (1, 2, 3)二、**kwargs可变关键字参数2.1 基本用法**kwargs允许函数接受任意数量的关键字参数。在函数内部kwargs是一个字典(dict)。12345678defprint_info(**kwargs):forkey, valueinkwargs.items():print(f{key}: {value})print_info(name张三, age25, city北京)# name: 张三# age: 25# city: 北京三、*args和**kwargs的组合使用123456defflexible_function(required_arg,*args,**kwargs):print(f必需参数: {required_arg})print(f位置参数: {args})print(f关键字参数: {kwargs})flexible_function(hello,1,2,3, nametest, value100)四、参数解包Unpacking12345678defadd(a, b, c):returnabcnumbers[1,2,3]print(add(*numbers))# 等价于 add(1, 2, 3)data{a:1,b:2,c:3}print(add(**data))# 等价于 add(a1, b2, c3)五、实际应用场景5.1 装饰器123456789importtimedeftimer(func):defwrapper(*args,**kwargs):starttime.time()resultfunc(*args,**kwargs)print(f{func.__name__} 执行时间: {time.time() - start:.4f}秒)returnresultreturnwrapper5.2 函数转发12345defwrapper_function(*args,**kwargs):print(前置处理...)resultactual_function(*args,**kwargs)print(后置处理...)returnresult六、注意事项与最佳实践
Python函数参数解包:*args与**kwargs深度解析
*args可变位置参数1.1 基本用法*args允许函数接受任意数量的位置参数。在函数内部args是一个元组(tuple)包含所有传入的位置参数。12345678defsum_all(*args):result0fornuminargs:resultnumreturnresultprint(sum_all(1,2,3))# 输出: 6print(sum_all(10,20))# 输出: 301.2 *args的本质实际上*args中的args只是一个约定俗成的名字。重要的是前面的*符号。1234567defshow_params(*numbers):print(f类型: {type(numbers)})print(f内容: {numbers})show_params(1,2,3)# 类型: class tuple# 内容: (1, 2, 3)二、**kwargs可变关键字参数2.1 基本用法**kwargs允许函数接受任意数量的关键字参数。在函数内部kwargs是一个字典(dict)。12345678defprint_info(**kwargs):forkey, valueinkwargs.items():print(f{key}: {value})print_info(name张三, age25, city北京)# name: 张三# age: 25# city: 北京三、*args和**kwargs的组合使用123456defflexible_function(required_arg,*args,**kwargs):print(f必需参数: {required_arg})print(f位置参数: {args})print(f关键字参数: {kwargs})flexible_function(hello,1,2,3, nametest, value100)四、参数解包Unpacking12345678defadd(a, b, c):returnabcnumbers[1,2,3]print(add(*numbers))# 等价于 add(1, 2, 3)data{a:1,b:2,c:3}print(add(**data))# 等价于 add(a1, b2, c3)五、实际应用场景5.1 装饰器123456789importtimedeftimer(func):defwrapper(*args,**kwargs):starttime.time()resultfunc(*args,**kwargs)print(f{func.__name__} 执行时间: {time.time() - start:.4f}秒)returnresultreturnwrapper5.2 函数转发12345defwrapper_function(*args,**kwargs):print(前置处理...)resultactual_function(*args,**kwargs)print(后置处理...)returnresult六、注意事项与最佳实践