【问题标题】:Pass a list to a function to act as multiple arguments将列表传递给函数以充当多个参数
【发布时间】:2011-03-29 15:42:26
【问题描述】:

我认为这里的“解包”可能是错误的词汇 - 抱歉,因为我确定这是一个重复的问题。

我的问题很简单:在一个需要项目列表的函数中,我如何才能传递 Python 列表项而不出错?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

肯定有办法扩展列表,并通过函数'red','blue','orange' 吗?

【问题讨论】:

    标签: python list parameter-passing


    【解决方案1】:
    function_that_needs_strings(*my_list) # works!
    

    You can read all about it here.

    【讨论】:

      【解决方案2】:

      是的,您可以使用*args (splat) 语法:

      function_that_needs_strings(*my_list)
      

      其中my_list 可以是任何可迭代的; Python 将遍历给定对象并将每个元素用作函数的单独参数。

      请参阅call expression documentation

      还有一个等效的关键字参数,使用两颗星:

      kwargs = {'foo': 'bar', 'spam': 'ham'}
      f(**kwargs)
      

      还有equivalent syntax 用于在函数签名中指定包罗万象的参数:

      def func(*args, **kw):
          # args now holds positional arguments, kw keyword arguments
      

      【讨论】:

        【解决方案3】:

        从 Python 3.5 开始,您可以解压缩无限数量的 lists。

        PEP 448 - Additional Unpacking Generalizations

        所以这会起作用:

        a = ['1', '2', '3', '4']
        b = ['5', '6']
        function_that_needs_strings(*a, *b)
        

        【讨论】:

        • 如何使用 python 2.7 或 3.4 做同样的事情?
        • @answerSeeker 效率不高,但 function_that_needs_strings(*(a+b))
        • 哇,真不敢相信在此之前你做不到。
        • @answerSeeker 更高效:function_that_needs_strings(*itertools.chain(a, b))
        猜你喜欢
        • 2018-11-16
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-13
        相关资源
        最近更新 更多