我有一些递归的回溯代码,在做出选择之前测试选择是否有效。在递归的is_legal_choice函数中嵌套solve函数是个坏主意吗?每次调用solve函数时,会重新定义这个内部函数吗?
发布于 2014-04-17 16:41:37
是的,每次调用函数时,内部函数都会被重新定义。但是,它并不像您想象的那样糟糕;Python代码只被解析成代码对象一次,每次只重新构建函数对象(它作为代码对象的包装器)。
发布于 2014-04-17 16:43:34
是的,每次调用它时都会重新定义它。然而,这并不总是一个坏主意。这就是你如何做一个结束,这有时是有用的。
如果您的is_legal_choice函数需要使用一些只能在外部函数范围内可用的数据,那么我建议您继续使用它。性能开销不会太大(如果需要,可以随时分析)。
如果is_legal_choice不需要来自solve参数的任何数据,那么做任何让您的代码最容易理解的事情。
您可以通过google找到更多关于闭包的信息,但下面是一个示例:http://ynniv.com/blog/2007/08/closures-in-python.html
https://stackoverflow.com/questions/23138783
复制相似问题