如何将列表拆包后作为参数传入多变量Python函数?
解决方案
Python 原生自带序列解包能力,不需要额外定义 f 函数就能实现你的需求:传参时给列表变量加 * 前缀,就会自动把列表拆分为独立的位置参数传入函数,完全不用手动写索引取值:
def abc(x, y): return x + y z = [6, 5] # 效果完全等同于 abc(z[0], z[1]) print(abc(*z)) # 输出结果为 11
如果你必须严格使用 abc(f(z)) 的调用形式,需要注意:原 abc 定义为接收2个位置参数,直接传入单个参数会触发参数数量不匹配的报错,因此需要做少量调整,可选两种方案:
- 方案1:修改原
abc函数,使其支持接收列表类型的单个参数
def abc(args): x, y = args return x + y z = [6, 5] # 此时f只需原样返回输入即可 f = lambda x: x print(abc(f(z))) # 输出 11
- 方案2:不改动原
abc函数,用装饰器对其做包装,自动完成解包逻辑
def unpack_decorator(func): def wrapper(args): return func(*args) return wrapper def abc(x, y): return x + y # 包装后的abc支持直接传入列表 abc = unpack_decorator(abc) z = [6, 5] f = lambda x: x print(abc(f(z))) # 输出 11
内容的提问来源于stack exchange,提问作者Akira
相关产品推荐
相关产品推荐

