我想知道,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,它曾经对我非常有用。干杯!
我想知道,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,它曾经对我非常有用。干杯!
您可以使用*
运算符获得相同的效果:
f_1(*(1, 2)) = f_1(1, 2)
...
后面的表达式*
不必是元组,它可以是任何计算结果为序列的表达式。
Python 也有一个内置apply
函数,可以做你所期望*
的,但自 Python 2.3 起它已经过时了,取而代之的是运算符。如果您apply
出于某种原因需要并且想要避免弃用的污点,那么实现一个是微不足道的:
def my_apply(f, args):
return f(*args)
Python 对此具有语言级别的功能,称为“参数解包”,或简称为“splat”。
# With positional arguments
args = (1, 2, 3)
f_1(*args)
# With keyword arguments
kwargs = {'first': 1, 'second': 2}
f_2(**kwargs)
*
是的,在参数列表中使用运算符。举一个实际的例子:
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])