如何将函数应用于元组?

How do I apply a function to a tuple?

这应该很简单:如何将函数应用于 Python 中的元组?

即:

Python 3.9.9 (main, Nov 16 2021, 09:34:38) 
[Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def g(a,b):
...   return a+b
... 
>>> tup = (3,4)
>>> 
>>> g(tup)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: g() missing 1 required positional argument: 'b'
>>> g.apply(tup)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'apply'
>>> apply(g,tup)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'apply' is not defined

我当然可以写一个 g 的版本,它需要一个元组,或者甚至是一个为一般的 2-arg 函数做的转换函数:

>>> def conv2(fun):
...   def tuplefun(tup):
...     (a,b) = tup
...     return fun(a,b)
...   return tuplefun
... 
>>> tuple_g = conv2(g)
>>> tuple_g(tup)
7

...但这不适用于任意参数函数的一般情况。

(ObResearch:我搜索了这个问题的答案大约五分钟,发现了一大堆关于 pandas 数据帧的问题,但 none 似乎回答了这个问题。我是确保这有一​​个简单的答案,我很抱歉没有找到它,但如果我没有找到它,那么可能很多其他人也是......换句话说,“重复问题#XXXXX”将是非常受欢迎的在这里。)

(对我来说具有讽刺意味的是,我最喜欢的问题是 完全相同的问题 关于 Scala 语言,从 2010 年开始。我想我的角色在生活中是函数式程序员袭击其他语言......?)

你这样写:

>>> g(*tup)

使用元组解包语法:

>>> def g(a,b):
...   return a+b
... 
>>> tup = (3,4)
>>> 
>>> g(*tup)