Python 将多个函数分配给单个变量?
在Python中,我们可以将函数分配给变量。例如,math.sine函数:Python 将多个函数分配给单个变量?,python,Python,在Python中,我们可以将函数分配给变量。例如,math.sine函数: sin = math.sin rad = math.radians print sin(rad(my_number_in_degrees)) def sin_rad(degrees): return math.sin(math.radians(degrees)) import numpy as np def chainFunctions(functions): def innerFunction(
sin = math.sin
rad = math.radians
print sin(rad(my_number_in_degrees))
def sin_rad(degrees):
return math.sin(math.radians(degrees))
import numpy as np
def chainFunctions(functions):
def innerFunction(y):
return reduce(lambda m, n: n(m), functions, y)
return innerFunction
if __name__ == '__main__':
functions = [np.sin, np.cos, np.abs]
ch = chainFunctions( functions )
print ch(3)
有没有简单的方法将多个函数(即函数中的一个函数)分配给一个变量?例如:
sin = math.sin(math.radians) # I cannot use this with brackets
print sin (my_number_in_degrees)
只需创建一个包装器函数:
sin = math.sin
rad = math.radians
print sin(rad(my_number_in_degrees))
def sin_rad(degrees):
return math.sin(math.radians(degrees))
import numpy as np
def chainFunctions(functions):
def innerFunction(y):
return reduce(lambda m, n: n(m), functions, y)
return innerFunction
if __name__ == '__main__':
functions = [np.sin, np.cos, np.abs]
ch = chainFunctions( functions )
print ch(3)
正常调用包装器函数:
print sin_rad(my_number_in_degrees)
您可以编写一个helper函数来为您执行,并使用它创建所需的变量类型。一些很好的特性是,它可以将数量可变的函数组合在一起,每个函数都接受数量可变的参数
import math
try:
reduce
except NameError: # Python 3
from functools import reduce
def compose(*funcs):
""" Compose a group of functions (f(g(h(...)))) into a single composite func. """
return reduce(lambda f, g: lambda *args, **kwargs: f(g(*args, **kwargs)), funcs)
sindeg = compose(math.sin, math.radians)
print(sindeg(90)) # -> 1.0
我认为作者想要的是某种形式的功能链接。一般来说,这是困难的,但对于
functions = [np.sin, np.cos, np.abs]
>>> reduce(lambda m, n: n(m), functions, 3)
0.99005908575986534
是否可以编写一个将所有这些链接在一起的通用函数?好的,我们可以使用reduce
,尽管Guido并不特别喜欢map
,reduce
实现,并打算将它们去掉
像这样的
functions = [np.sin, np.cos, np.abs]
>>> reduce(lambda m, n: n(m), functions, 3)
0.99005908575986534
现在我们如何创建一个函数来实现这一点呢?那么,只需创建一个接受值并返回函数的函数:
sin = math.sin
rad = math.radians
print sin(rad(my_number_in_degrees))
def sin_rad(degrees):
return math.sin(math.radians(degrees))
import numpy as np
def chainFunctions(functions):
def innerFunction(y):
return reduce(lambda m, n: n(m), functions, y)
return innerFunction
if __name__ == '__main__':
functions = [np.sin, np.cos, np.abs]
ch = chainFunctions( functions )
print ch(3)
sinrad=lambda n:math.sin(math.radians(n))
?为了澄清,您所描述的不是为一个变量分配多个函数。它只分配一个函数,恰好是另外两个函数的组合。这对于类似这样的东西来说已经足够好了,而且可读性更强。