Python *args 和 **kwargs使用

博客介绍了函数传参数量不确定时的处理方法,可使用*args和**kwargs。*args无key值,将参数打包成元组;**kwargs有key值,把关键字参数打包成字典,二者用于函数调用。

当函数的传参不确定数量时,可以使用 args和kwargs。
一般*args 无key值,**kwargs有key值。
*args 是用来将参数打包成元组给函数调用的,args即是传给函数的参数所构成的元组;
**kwargs是用来将关键字参数打包成字典给函数调用的,kwargs即是传给函数所构成的字典。

def foo(*args, **kargs):
	print(args)
	print(args[-1])
	print(args[0] + 1)
	print(kargs)
	print(kargs['name'])

foo(1, 2, 3, 4, test='test', name="Bruce")

输出结果如下:

(1, 2, 3, 4)
4
2
{'test': 'test', 'name': 'Bruce'}
Bruce

Python 中,`*args` `**kwargs` 是用于处理可变数量参数的特殊语法,二者可在参数定义参数传递时使用。 ### 参数定义 在参数定义时,`*args` `**kwargs` 用于打包参数,适用于参数个数不确定的情况。 - `*args`:用于对 tuple 型参数打包,对应的是函数的位置参数。在函数定义中,`*args` 会将所有额外的位置参数收集到一个元组中。示例代码如下: ```python def sum_numbers(*args): total = 0 for num in args: total += num return total result = sum_numbers(1, 2, 3, 4) print(result) # 输出: 10 ``` - `**kwargs`:用于对 dict 型参数打包,对应的是函数的关键字参数。在函数定义中,`**kwargs` 会将所有额外的关键字参数收集到一个字典中。示例代码如下: ```python def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") print_info(name="Alice", age=30, city="New York") # 输出: # name: Alice # age: 30 # city: New York ``` ### 参数传递 在参数传递时,`*` `**` 用于解包参数。 - `*`:用于解包元组或列表等可迭代对象,将其中的元素作为位置参数传递给函数。示例代码如下: ```python def add(a, b, c): return a + b + c numbers = (1, 2, 3) result = add(*numbers) print(result) # 输出: 6 ``` - `**`:用于解包字典,将字典中的键值对作为关键字参数传递给函数。示例代码如下: ```python def greet(name, age): print(f"Hello, {name}! You are {age} years old.") person = {'name': 'Bob', 'age': 25} greet(**person) # 输出: # Hello, Bob! You are 25 years old. ``` ### 解耦方法 在使用装饰器时,为了保留原函数的元信息,可以使用 `functools.wraps` 进行解耦。示例代码如下: ```python from functools import wraps def my_decorator(func): @wraps(func) def wrapper(*args, **kwargs): print("Before calling the function") result = func(*args, **kwargs) print("After calling the function") return result return wrapper @my_decorator def say_hello(name): """Greet someone by name.""" print(f"Hello, {name}!") print(say_hello.__name__) # 输出: say_hello print(say_hello.__doc__) # 输出: Greet someone by name. ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值