Récemment, j'ai pris l'habitude d'écrire des fonctions récursives dans des fonctions wrapper en python. Par exemple, ma vieille habitude d'appeler des fonctions récursives à partir d'une enveloppe est la suivante:Ecriture d'une fonction récursive dans la fonction dans python: obsolète?
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
D'autre part, ma nouvelle habitude est d'intégrer cette fonction récursive dans l'emballage:
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)
(La raison pour laquelle je le fais est parce que vous ne voulez probablement pas polluer l'espace de noms avec des fonctions auxiliaires. De plus, vous pourriez traiter la fonction d'assistance comme une fermeture, au cas où vous voudriez accéder à des variables de la fonction wrapper.
Mais ce style d'écriture de code est-il déprécié? Je ne trouve nulle part dans PEP 8 que les fonctions d'incorporation dans les fonctions sont déconseillées.
Dans la version imbriquée, la fonction d'assistance sera redéfinie chaque fois que la fonction externe est appelée. – augurar
@augurar: C'est vrai. Mais à moins que j'écrive une très grande fonction récursive, cela ne devrait pas poser de problème pour redéfinir la fonction imbriquée à chaque fois. – hlin117