在Python中,我们可以为变量赋值。例如,math.sine函数:
sin = math.sin
rad = math.radians
print sin(rad(my_number_in_degrees))
有没有简单的方法为变量分配多个函数(即函数的函数)?例如:
sin = math.sin(math.radians) # I cannot use this with brackets
print sin (my_number_in_degrees)
答案 0 :(得分:5)
只需创建一个包装函数:
def sin_rad(degrees):
return math.sin(math.radians(degrees))
正常调用您的包装函数:
print sin_rad(my_number_in_degrees)
答案 1 :(得分:2)
我认为作者想要的是某种形式的功能链。一般来说,这很难,但对于
的功能可能是可能的让我们说有一个我们需要链接的函数列表,从中获取一个参数,并返回一个参数。此外,类型是一致的。像这样......
functions = [np.sin, np.cos, np.abs]
是否可以编写将所有这些链接在一起的通用函数?好吧,我们可以使用reduce
但是,Guido并不特别喜欢map
,reduce
实现,并且即将把它们拿出来......
像这样......
>>> reduce(lambda m, n: n(m), functions, 3)
0.99005908575986534
现在我们如何创建一个执行此操作的函数?好吧,只需创建一个带值的函数并返回一个函数:
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)
答案 2 :(得分:1)
您可以编写辅助函数来为您执行function composition并使用它来创建所需的变量类型。一些不错的功能是它可以将可变数量的函数组合在一起,每个函数都接受可变数量的参数。
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