将元组展开为参数
假设我有一个这样的函数:
def myfun(a, b, c):
return (a * 2, b + c, c + b)
给定一个元组 some_tuple = (1, "foo", "bar")
,我该如何使用 some_tuple
来调用 myfun
?这样应该输出结果 (2, "foobar", "barfoo")
。
我知道可以直接定义 myfun
让它接受这个元组,但我想调用已经存在的 myfun
。
另见: 在函数调用中,**(双星号)和*(星号)是什么意思? - 这是给那些遇到这种语法并感到困惑的人的相关问题。
5 个回答
16
看看Python教程的第4.7.3和4.7.4部分。这些部分讲的是如何将元组作为参数传递。
我还建议使用命名参数(也就是传递一个字典),而不是使用元组和传递一个序列。当参数的位置不太直观或者有多个参数时,我觉得使用位置参数是一种不太好的做法。
80
请注意,你也可以扩展参数列表中的一部分:
myfun(1, *("foo", "bar"))
984
myfun(*some_tuple)
完全按照你的要求来做。这里的 *
符号就是用来“拆包”的,它会把元组(或者任何可迭代的东西)里的内容拆开,然后作为位置参数传给这个函数。如果想了解更多关于这个“拆包”的内容,可以看看这个链接。