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

3

同时保留可在函数内执行的代码。

背后的想法是我想创建一个求和函数。目前为止,这是我所拥有的:

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显然是危险的。


这篇文章有帮助吗?https://dev59.com/Q3RA5IYBdhLWcg3w2xwI - Nathan Henkel
1个回答

6
在Python中,函数是一等公民,也就是说它们可以像其他值一样使用和传递,因此您可以获取一个函数:
def example(f):
    return f(1) + f(2)

要运行它,你可以定义一个像这样的函数:
def square(n):
    return n * n

然后将其传递给您的另一个函数:
example(square)  # = square(1) + square(2) = 1 + 4 = 5

您可以使用lambda来避免定义新函数,如果它只是一个简单的表达式:
example(lambda n: n * n)

这解决了函数的问题,但我如何将算术运算(就像我给出的_e_示例中)也纳入其中? - user2330618
我希望不需要为每个操作定义另一个函数,而能够直接使用。 - user2330618
2
@李:只需使用更复杂的 lambda 表达式,例如 summation(0, 'inf', lambda n: 1 / factorial(n)) - icktoofay
1
@Lee:你可以继续计算直到前一个部分和 == 下一个部分和。如果这不令人满意,你应该提出一个新的问题。 - icktoofay
@李:当x超出收敛范围时,就会发生这种情况。正如W0函数的维基百科页面所述,收敛半径为1/e。使用0.1的x进行测试对我来说是有效的。 - icktoofay
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接