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和可能由用户输入的代码显然是危险的。
- 这篇文章有帮助吗?stackoverflow.com/questions/803616/…
在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) |
- 它处理函数,但是我如何还可以合并算术(如我给出的E示例中所示)?
- (也就是说,不需要为我想要使用的每个操作定义另一个函数。)
- @李:用更复杂的lambda表达,如summation(0, 'inf', lambda n: 1 / factorial(n))。
- 对于无限求和,是否有一种简单的方法可以"计算到可用的浮点精度",正如python文档所宣称的e和π,或者我应该问一个新的问题?
- @李:你可以继续下去,直到上一个部分和,下一个部分和。如果这不令人满意,你可能应该问一个新问题。
- 我怀疑情况会是这样。
- 我在定义我提到的w函数时遇到了一个问题。代码是def W(x, branch=None): return summation(1, 'inf', lambda n: (((-n) ** (n - 1)) / factorial(n)) * (x ** n))。除了零以外,我什么都打电话给了OverflowError: integer division result too large for a float。
- @李:当x超出收敛范围时,就会发生这种情况。正如w0函数上的wikipedia页面所指出的,收敛半径是1/e。使用0.1的x进行测试对我来说是可行的。