在 python 中的函数内编写递归函数:已弃用?

Writing a recursive function within function in python: deprecated?

最近,我养成了在 python 的包装函数中编写递归函数的习惯。例如,我从包装器调用递归函数的老习惯如下:

def sortedArrayToBST(nums):   
    return _toBST(nums)

def _toBST(nums):
    if len(nums) == 0: return None
    mid = len(nums) / 2
    root = TreeNode(nums[mid])
    root.left = _toBST(nums[:mid])         
    root.right = _toBST(nums[mid+1:])
    return root

另一方面,我的新习惯是将这个递归函数嵌入包装器中:

def sortedArrayToBST(self, nums):

    def toBST(nums_):
        if len(nums_) == 0: return None
        mid = len(nums_) / 2
        root = TreeNode(nums_[mid])
        root.left = toBST(nums_[:mid])
        root.right = toBST(nums_[mid+1:])
        return root

    return toBST(nums)

(Problem source here)

我这样做的原因是您可能不想用辅助函数污染命名空间。另外,如果您想从包装函数访问变量,您可以将辅助函数视为闭包。

但是这种代码编写风格是否已被弃用?我在 PEP 8 中找不到任何地方声明不鼓励在函数中嵌入函数。

我知道 Python 中没有针对嵌套函数的限制。我不认为用下划线引导名称是必要的。因为是嵌套函数定义,它不会与局部范围外的名称冲突,所以只需使用最自然流畅的名称(就好像您正在向某人阅读该函数并解释其工作原理)。

另一方面,由于缺少尾递归消除,最好在 Python 中避免递归。我建议阅读以下内容:http://blog.moertel.com/posts/2013-05-11-recursive-to-iterative.html ...看看您是否可以将代码转换为迭代实现。