如何以列表形式传递Python函数的可选参数
问题解答
当使用*操作符传递列表给带可选参数的函数时,列表元素是按位置顺序匹配函数参数的,没办法跳过中间的可选参数直接给后面的参数传值。
针对你的需求,要让foo(*[?])输出6,你需要在列表里按a、b、c的顺序填充值,保证三者相加等于6。因为b的默认值是0,你可以直接填0来占位,示例如下:
def foo(a, b=0, c=0): print(a + b + c) # 直接让a=6,b和c用默认0,总和6 foo(*[6, 0, 0]) # 输出6 # 或者拆分a和c的数值,b填0占位 foo(*[2, 0, 4]) # 2+0+4=6,输出6
如果你不想显式写出b的0,那没办法用*列表实现——这种场景下应该用**操作符传递字典(关键字参数),比如:
foo(**{'a':3, 'c':3}) # 同样输出6,但这是关键字传参,不是列表形式
总结:*操作符的本质是位置传参,必须严格对应参数顺序,中间的可选参数位置不能跳过,必须填充对应值(哪怕是默认值)才能让后续参数被正确赋值。
内容的提问来源于stack exchange,提问作者Raphael
相关产品推荐
相关产品推荐

