Maison >développement back-end >Tutoriel Python >En quoi les fermetures Python diffèrent-elles des fonctions imbriquées ?

En quoi les fermetures Python diffèrent-elles des fonctions imbriquées ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-24 18:15:13906parcourir

How Do Python Closures Differ From Nested Functions?

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!

Déclaration:
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