【问题标题】:passing a tuple in *args在 *args 中传递一个元组
【发布时间】:2018-03-29 09:06:34
【问题描述】:

我想将元组(或者可能是列表)作为值序列(参数)传递给函数。然后应该将元组作为参数解压缩到 *arg 中。

例如,这是明确的:

def func(*args):
    for i in args:
        print "i = ", i

func('a', 'b', 3, 'something')

但我想做的是:

tup = ('a1', 'a2', 4, 'something-else')
func(tup)

这应该与第一种情况类似。 我想我应该在这里使用 reprint 和 eval 但不确定如何准确。

我知道我可以只在函数中传递元组,然后在主体中解包,但我的问题是如何在函数调用本身中解包。

【问题讨论】:

  • 只需使用func(*tup)

标签: python eval args


【解决方案1】:

调用函数时可以直接使用func(*tup)解包元组。

>>> func(*tup)
i =  a1
i =  a2
i =  4
i =  something-else

这相当于func(tup[0], tup[1], tup[2], ...)。如果函数需要多个单独的参数,这同样适用:

>>> def func2(a, b, c, d):
...     print(a, b, c, d)
...
>>> func2(*tup)
('a1', 'a2', 4, 'something-else')

参见例如here 了解更深入的语法背景。

【讨论】:

    【解决方案2】:

    您可以在调用过程中通过在元组标识符前添加* 来解包元组。这使您可以轻松区分应该解包的元组和不应该解包的元组。这是一个例子:

    >>> MyTuple = ('one', 2, [3])
    >>>
    >>> def func(*args):
    ...  for arg in args:
    ...   print(arg)
    ...
    >>>
    >>> func(*MyTuple)
    one
    2
    [3]
    >>>
    >>> func(MyTuple)
    ('one', 2, [3])
    

    【讨论】:

      【解决方案3】:

      如果你想解压你的元组,你可以使用 *args。 您的方法定义如下:

      def func(*tup):
          for i in tup:
              print(print "i = ",i)
      

      现在调用你的方法:

      tup = ('a1','a1',4,'something-else') 
      func(*tup)
      

      这将产生你的输出 -

      i = a1
      i = a2
      i = 4
      i = something-else
      

      【讨论】:

        猜你喜欢
        • 2018-12-24
        • 1970-01-01
        • 2021-06-16
        • 2021-05-20
        • 2018-05-18
        • 2017-11-05
        • 1970-01-01
        • 2021-09-02
        • 2020-08-11
        相关资源
        最近更新 更多