例如:
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")
答案 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)
答案 5 :(得分:0)
实际上,可以在不改变参数顺序的情况下进行。首先,您必须将字符串转换为元组,将其添加到元组mytuple
,然后将更大的元组作为参数传递。
printstuff(*(mytuple+(" How are you",)))
# With your example, it returns: "Hello World How are you"