Python中如何向含*args的函数传递列表/元组形式的可变参数?
给*args函数传递列表/元组参数的最优方法
别用eval()这种绕弯子的办法了,Python原生就有完美的解决方案——序列解包,直接在列表或元组前面加个*就行,完全不用修改原函数。
具体用法
先看你的原函数:
def product(*args): res = 1 for x in args: res *= x return res
假设你有一个列表或者元组:
my_list = [2, 5, 3] my_tuple = (4, 2, 1)
调用的时候直接这么写:
# 传递列表 print(product(*my_list)) # 输出30 # 传递元组 print(product(*my_tuple)) # 输出8
为什么这方法更优
- 比
eval()安全得多,完全不存在代码注入风险 - 写法简洁直观,属于Python的惯用语法,其他开发者一眼就能看懂
- 性能远高于动态生成代码的方式,不需要额外的代码解析步骤
额外补充:字典传参场景
如果你的函数还支持**kwargs接收关键字参数,那可以用**来解包字典:
def user_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") user_dict = {"name": "Bob", "city": "Beijing"} user_info(**user_dict) # 输出: # name: Bob # city: Beijing
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

