将多个函数分配给单个变量?

时间:2016-05-26 01:04:41

标签: python

在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)

3 个答案:

答案 0 :(得分:5)

只需创建一个包装函数:

def sin_rad(degrees):
    return math.sin(math.radians(degrees))

正常调用您的包装函数:

print sin_rad(my_number_in_degrees)

答案 1 :(得分:2)

我认为作者想要的是某种形式的功能链。一般来说,这很难,但对于

的功能可能是可能的
  1. 采取一个论点,
  2. 返回单个值,
  3. 列表中上一个函数的返回值与下一个函数的输入类型的列表类型相同
  4. 让我们说有一个我们需要链接的函数列表,从中获取一个参数,并返回一个参数。此外,类型是一致的。像这样......

    functions = [np.sin, np.cos, np.abs]
    

    是否可以编写将所有这些链接在一起的通用函数?好吧,我们可以使用reduce但是,Guido并不特别喜欢mapreduce实现,并且即将把它们拿出来......

    像这样......

    >>> 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