【问题标题】:Converting list to *args when calling function [duplicate]调用函数时将列表转换为 *args [重复]
【发布时间】:2023-03-09 08:10:02
【问题描述】:

在 Python 中,如何将列表转换为 *args

我需要知道因为函数

scikits.timeseries.lib.reportlib.Report.__init__(*args)

想要几个 time_series 对象作为 *args 传递,而我有一个 timeseries 对象列表。

【问题讨论】:

    标签: python list arguments function-call


    【解决方案1】:

    您可以在可迭代对象之前使用* 运算符在函数调用中扩展它。例如:

    timeseries_list = [timeseries1 timeseries2 ...]
    r = scikits.timeseries.lib.reportlib.Report(*timeseries_list)
    

    (注意* 之前的timeseries_list

    来自python documentation

    如果函数调用中出现语法 *expression,则表达式 必须评估为可迭代。来自这个可迭代的元素被处理 好像它们是额外的位置参数;如果有 位置参数 x1, ..., xN 和表达式的计算结果为 序列 y1, ..., yM,这相当于一个 M+N 位置的调用 参数 x1, ..., xN, y1, ..., yM。

    这也包含在 python 教程中,在标题为 Unpacking argument lists 的部分中,它还展示了如何使用 ** 运算符对关键字参数的字典执行类似的操作。

    【讨论】:

    【解决方案2】:

    是的,使用 *arg 将 args 传递给函数将使 python 解包 arg 中的值并将其传递给函数。

    所以:

    >>> def printer(*args):
     print args
    
    
    >>> printer(2,3,4)
    (2, 3, 4)
    >>> printer(*range(2, 5))
    (2, 3, 4)
    >>> printer(range(2, 5))
    ([2, 3, 4],)
    >>> 
    

    【讨论】:

      【解决方案3】:

      *args 只是表示该函数接受多个参数,通常是相同的类型。

      查看 Python 教程中的 this section 了解更多信息。

      【讨论】:

      • 我认为 OP 已经知道这一点。该函数接受多个参数,但它们有一个列表,它们希望作为多个参数传入。
      • @Bryan Oakley:我链接的文档解释了如何做到这一点。
      • 虽然这是真的,但您回答问题的措辞听起来像是链接指向其他地方。我认为如果您将其改写为解决解包问题而不是 *args 的含义,您的答案会更有用。
      • 您能否为“通常属于同一类型”部分提供定性引用?
      猜你喜欢
      • 1970-01-01
      • 2013-03-07
      • 2021-12-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2014-07-14
      • 1970-01-01
      相关资源
      最近更新 更多