Python,元组参数与其他人很好地协调

时间:2011-03-28 20:46:18

标签: python arguments tuples typeerror

例如:

mytuple = ("Hello","World")
def printstuff(one,two,three):
    print one,two,three

printstuff(mytuple," How are you")

这自然会因为TypeError而崩溃,因为我只想给它两个参数。

有没有一种简单的方法可以有效地“分裂”元组,而不是扩展所有内容?像:

printstuff(mytuple[0],mytuple[1]," How are you")

6 个答案:

答案 0 :(得分:6)

有点,......你可以这样做:

>>> def fun(a, b, c):
...     print(a, b, c)
...
>>> fun(*(1, 2), 3)
  File "<stdin>", line 1
SyntaxError: only named arguments may follow *expression
>>> fun(*(1, 2), c=3)
1 2 3

正如你所看到的,你可以做你想要的事情,只要你用它的名字限定它后面的任何参数。

答案 1 :(得分:4)

不是不改变参数排序或切换到命名参数。

这是命名参数替代方案。

printstuff( *mytuple, three=" How are you" )

这是切换订单的替代方案。

def printstuff( three, one, two ):
    print one, two, three

printstuff( " How are you", *mytuple )

这可能非常糟糕。

答案 2 :(得分:3)

尝试以下方法:

printstuff(*(mytuple[0:2]+(" how are you",)))

答案 3 :(得分:1)

mytuple = ("Hello","World")

def targs(tuple, *args):
    return tuple + args

def printstuff(one,two,three):
    print one,two,three 

printstuff(*targs(mytuple, " How are you"))
Hello World  How are you

答案 4 :(得分:0)

你可以尝试:

def printstuff(*args):
    print args

另一种选择是使用新的namedtuple集合类型。

答案 5 :(得分:0)

实际上,可以在不改变参数顺序的情况下进行。首先,您必须将字符串转换为元组,将其添加到元组mytuple,然后将更大的元组作为参数传递。

printstuff(*(mytuple+(" How are you",)))
# With your example, it returns: "Hello World  How are you"