Maison >développement back-end >Tutoriel Python >En quoi les fermetures Python diffèrent-elles des fonctions imbriquées ?
Fermetures en Python : dévoiler le mystère
Les fonctions imbriquées sont couramment trouvées en Python, ce qui soulève des questions sur leur relation avec les fermetures. Bien qu'elles partagent certaines caractéristiques, elles ne sont pas interchangeables.
Les fermetures sont des fonctions qui conservent l'accès aux variables locales de la portée externe même une fois l'exécution de la fonction englobante terminée. Cela leur permet d'utiliser ces variables plus tard.
Fonctions imbriquées et fermetures
Les fonctions imbriquées, en revanche, sont définies dans une autre fonction mais n'héritent pas de sa variables locales par défaut. Ils ne deviennent des fermetures que s'ils font référence à des variables locales de la portée externe qui seraient autrement hors de portée une fois la fonction englobante terminée.
Exemple de fermeture en Python :
def make_printer(msg): def printer(): print(msg) return printer printer = make_printer('Foo!') printer() # Output: Foo!
Dans cet exemple, la fonction imbriquée imprimante fait référence à la variable locale msg de la fonction englobante make_printer. Lorsque make_printer revient, msg est généralement hors de portée, mais la fermeture en conserve l'accès.
L'absence de fermeture dans les fonctions imbriquées qui ne font pas référence aux variables de portée externe :
Si une fonction imbriquée ne fait référence à aucune variable locale de la portée externe, elle n'est pas considérée comme une fermeture. Au lieu de cela, elle se comporte comme une fonction ordinaire avec ses propres variables locales.
Exemple de fonction imbriquée sans fermeture :
def make_printer(msg): def printer(msg=msg): print(msg) return printer printer = make_printer('Foo!') printer() # Output: Foo!
Ici, la valeur par défaut de le paramètre msg est utilisé dans l'imprimante de fonctions imbriquées, garantissant qu'elle possède sa propre variable locale indépendante de la portée externe. Ce n'est donc pas une clôture.
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!