如何将函数或运算符作为参数传递给Python中的函数?

How can I pass functions or operators as arguments to a function in Python?

…同时仍在函数中保留它的可执行文件。

这背后的想法是我想创建一个求和函数。以下是我目前为止的情况:

1
2
3
4
5
6
7
8
def summation(n, bound, operation):
    if operation is None and upper != 'inf':
        g = 0
        for num in range(n, limit + 1):
            g += num
        return g
    else:
        pass

但是求和通常是关于无限收敛级数的(我使用'inf'),其中每个项都应用了运算。理想情况下,我希望能够编写print summation(0, 'inf', 1 / factorial(n))并得到数学常数e,或者def W(x): return summation(1, 'inf', ((-n) ** (n - 1)) / factorial(n))得到lambert w函数。

我想到的只是将适当的算术作为字符串传递,然后使用exec语句来执行它。但我不认为这能完成整个过程,而且使用exec和可能由用户输入的代码显然是危险的。


在python中,函数是一流的,也就是说,它们可以像其他任何值一样被使用和传递,所以您可以使用一个函数:

1
2
def example(f):
    return f(1) + f(2)

要运行它,可以定义如下函数:

1
2
def square(n):
    return n * n

然后将其传递给您的其他函数:

1
example(square)  # = square(1) + square(2) = 1 + 4 = 5

如果函数是简单表达式,也可以使用lambda来避免定义新函数:

1
example(lambda n: n * n)