将元组展开为参数

564 投票
5 回答
350855 浏览
提问于 2025-04-15 17:34

假设我有一个这样的函数:

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) 完全按照你的要求来做。这里的 * 符号就是用来“拆包”的,它会把元组(或者任何可迭代的东西)里的内容拆开,然后作为位置参数传给这个函数。如果想了解更多关于这个“拆包”的内容,可以看看这个链接

撰写回答