Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将多个函数分配给单个变量?_Python - Fatal编程技术网

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

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(

在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(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))
    ?为了澄清,您所描述的不是为一个变量分配多个函数。它只分配一个函数,恰好是另外两个函数的组合。这对于类似这样的东西来说已经足够好了,而且可读性更强。