【发布时间】:2014-04-03 02:17:29
【问题描述】:
假设我在 Python 中有一个任意函数 f,它接受参数。
def f(x): return 2*x
现在假设我想要一个函数,它接受一个函数并返回相同的函数,但沿 y 轴翻转(如果它是图形的话)。
显而易见的方法是
def reverse_fn(f): return lambda x, funct=f: funct(-x)
但是,像这样堆叠函数修改函数会在一段时间后破坏最大递归深度,因为结果只是一个调用另一个函数的函数,该函数一直调用更多函数。
在 Python 中制作函数修改函数的最佳方法是什么,可以反复使用而不会占用过多的调用堆栈或嵌套函数?
【问题讨论】:
-
似乎funct不会调用另一个调用更多函数的函数。
-
我使用了一个 for 循环来应用 f = reverse_fn(f) 1000 次。 f(1) 现在立即抛出 RuntimeError: maximum recursion depth exceeded
-
最好的方法通常是重新编写你的代码以不堆叠这么多装饰器。普通的 Python 代码不会对单个函数应用多个。与尾递归一样,它是 Python 并不真正支持的一种编程风格。