Maison > développement back-end > Tutoriel Python > Fermetures Python et fonctions imbriquées : quelle est la différence ?

Fermetures Python et fonctions imbriquées : quelle est la différence ?

Patricia Arquette
Libérer: 2024-12-09 00:47:09
original
942 Les gens l'ont consulté

Python Closures vs. Nested Functions: What's the Difference?

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()
Copier après la connexion

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 :

  • Accéder aux variables locales de la portée englobante
  • Référencer ces variables lorsqu'elles sont exécutées en dehors de la portée

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!
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal