在递归函数中定义内部函数是个坏主意吗?

时间:2014-04-17 16:37:55

标签: python recursion

我有一些递归回溯代码,可以在做出选择之前测试选择是否有效。将is_legal_choice函数嵌套在递归solve函数中是不是一个坏主意?每次调用solve函数时,是否会重新定义此内部函数?

2 个答案:

答案 0 :(得分:5)

是的,每次调用函数时都会重新定义内部函数。但是,它并没有你想象的那么糟糕; Python代码被解析为一次代码对象,并且每次只重新构建函数对象(作为代码对象的一种包装器)。

答案 1 :(得分:1)

是的,每次调用时都会重新定义。但是,这并不总是一个坏主意。这就是你如何制作一个有时很有用的闭包。

如果您的is_legal_choice功能需要使用仅在外部功能范围内可用的某些数据,请说明一下。性能开销不会太大(如果需要,您可以随时进行分析)。

如果is_legal_choice不需要solve参数中的任何数据,请执行使您的代码最易理解的任何内容。

您可以在google上找到有关闭包的更多信息,但这里有一个示例:http://ynniv.com/blog/2007/08/closures-in-python.html