最近,我养成了在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
)
我这样做的原因是因为您可能不想用助手函数污染命名空间。此外,您可以将helper函数视为闭包,以防您希望从包装器函数访问变量。
但这种代码编写风格是否已被弃用?我在PEP 8中找不到任何地方声明不鼓励在函数中嵌入函数。