【问题标题】:*args treated as single argument*args 被视为单个参数
【发布时间】:2013-11-23 22:26:51
【问题描述】:

我正在尝试制作一个旨在多次调用另一个函数的函数:

def iterator(iterations, function, *args):  
#called as:
iterator(5, my_function, arg1, arg2, arg3)  

请注意,这里的参数数量是可变的:可能是 1,可能是 2,可能是 10。 根据正在调用的函数填写它们。

def iterator(iterations, function, *args):
  for i in range(iteration):
    temp = function(args)
  return temp

这里的问题是: TypeError: my_function() 正好接受 4 个参数(给定 1 个)

这是因为 (arg1, arg2, arg3, arg4) 被视为单个参数。

我该如何解决这个问题?

【问题讨论】:

    标签: python function arguments args


    【解决方案1】:

    应用args序列时使用相同的语法:

    temp = function(*args)
    

    这里的*args语法与*args函数参数语法密切相关;在调用中使用*args而不是捕获任意数量的参数,而是将序列扩展为单独的参数。

    您可能有兴趣知道还有 **kwargs 语法来捕获和应用关键字参数:

    def iterator(iterations, function, *args, **kwargs):
        for i in range(iteration):
            temp = function(*args, **kwargs)
        return temp
    

    【讨论】:

      【解决方案2】:

      试试这个,unpacking the argument list(又名喷溅):

      function(*args)
      

      从文档中的示例中,您会看到这是您所需要的:

      range(3, 6)    # ok
      range([3, 6])  # won't work
      range(*[3, 6]) # it works!
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-26
        • 2016-02-29
        • 2015-02-23
        • 2022-10-05
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        相关资源
        最近更新 更多