2

我想知道,python中是否有一个函数-让我们现在调用它apply-执行以下操作:

apply(f_1, 1) = f_1(1)
apply(f_2, (1, 2)) = f_1(1, 2)
...
apply(f_n, (1, 2,..., n)) = f_n(1, 2,..., n) # works with a tuple of proper length 

因为它确实存在于例如。A+Mathematica,它曾经对我非常有用。干杯!

4

3 回答 3

6

您可以使用*运算符获得相同的效果:

f_1(*(1, 2)) = f_1(1, 2)
...

后面的表达式*不必是元组,它可以是任何计算结果为序列的表达式。

Python 也有一个内置apply函数,可以做你所期望*的,但自 Python 2.3 起它已经过时了,取而代之的是运算符。如果您apply出于某种原因需要并且想要避免弃用的污点,那么实现一个是微不足道的:

def my_apply(f, args):
    return f(*args)
于 2013-06-11T21:22:22.247 回答
6

Python 对此具有语言级别的功能,称为“参数解包”,或简称为“splat”。

# With positional arguments
args = (1, 2, 3)
f_1(*args)

# With keyword arguments
kwargs = {'first': 1, 'second': 2}
f_2(**kwargs)
于 2013-06-11T21:22:38.740 回答
1

*是的,在参数列表中使用运算符。举一个实际的例子:

max(1, 2, 3, 4, 5)    # normal invocation
=> 5

max(*[1, 2, 3, 4, 5]) # apply-like invocation
=> 5

认为第二个片段等同于apply(max, [1, 2, 3, 4, 5])

于 2013-06-11T21:24:21.353 回答