Maison >développement back-end >Tutoriel Python >Fermetures Python et fonctions imbriquées : quelle est la différence ?
Fonctions de fermeture et fonctions imbriquées en Python : une clarification
Python présente un concept connu sous le nom de « fonctions imbriquées », souvent confondues avec des fermetures. Pour résoudre cette confusion, examinons la véritable nature des fermetures dans Python.
Une fermeture est définie comme une fonction qui maintient l'accès aux variables locales à partir d'une portée englobante, même après la fin de cette portée. En Python, une fermeture se produit lorsqu'une fonction imbriquée fait référence à des variables locales de la fonction englobante. Ces variables restent accessibles en dehors de la portée englobante en raison de l'accès de la fonction imbriquée à celles-ci.
Considérons l'exemple suivant :
def make_printer(msg): def printer(): print(msg) return printer printer = make_printer('Foo!') printer()
Dans ce scénario, la fonction imprimante est une fermeture car elle fait référence la variable locale msg de la fonction englobante make_printer. Même après la conclusion de make_printer, msg reste accessible à l'imprimante.
Cependant, toutes les fonctions imbriquées ne sont pas des fermetures. Pour qu'une fonction imbriquée soit considérée comme une fermeture, elle doit répondre à ces critères :
Si une fonction imbriquée ne répond pas à ces exigences, elle n'est pas considérée comme une fermeture mais plutôt comme une fonction imbriquée ordinaire.
Pour Par exemple, considérons le code suivant :
def make_printer(msg): def printer(msg=msg): print(msg) return printer printer = make_printer("Foo!") printer() # Output: Foo!
Ici, la fonction imbriquée imprimante n'est pas une fermeture car elle ne fait pas référence au msg de la fonction englobante. Au lieu de cela, il attribue une valeur au paramètre par défaut, éliminant ainsi le besoin d'un accès externe à msg.
Par conséquent, pour faire la distinction entre les fermetures et les fonctions imbriquées en Python, il est crucial de déterminer si la fonction imbriquée conserve ou non l'accès à variables locales de la portée englobante même après que cette dernière a terminé l'exécution.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!