如何将列表元素逐个作为参数传递给函数,而非直接传入整个列表
问题解答
这个需求完全可以实现,你之前对func(*argv)的用法存在误解:Python的星号(*)序列拆包语法,作用就是把元组/列表内的所有元素依次作为独立的位置参数传递给目标函数,而非把整个序列作为单个参数传入。
你只需要把funcExecuter函数按如下方式实现即可:
def funcExecuter(func, nbArgs, *argv): # *号会把argv元组里的元素逐个拆成位置参数传给func return func(*argv)
以你的调用逻辑为例:
- 执行
funcExecuter(testA, 3, 1, 2, 3)时,argv接收到的值为元组(1,2,3),func(*argv)等价于testA(1,2,3),完全匹配testA的参数要求 - 执行
funcExecuter(testB, 2, 1, 2)时,func(*argv)等价于testB(1,2),同样匹配参数要求
另外你传入的nbArgs参数实际是冗余的,你也可以省略这个参数,简化实现和调用逻辑:
# 简化后的实现 def funcExecuter(func, *argv): return func(*argv) # 简化后的调用 funcExecuter(testA, 1, 2, 3) funcExecuter(testB, 1, 2)
内容的提问来源于stack exchange,提问作者kaaldir
相关产品推荐
相关产品推荐

