Fonctions imbriquées et fermetures en Python
Bien que les fonctions imbriquées en Python ressemblent superficiellement à des fermetures, elles sont fondamentalement distinctes en raison d'une différence clé :
Fonctions imbriquées comme Non-fermetures
Les fonctions imbriquées en Python ne sont pas considérées comme des fermetures car elles ne répondent pas à l'exigence suivante :
Considérez ce qui suit exemple :
def make_printer(msg): def printer(): print(msg) return printer
Ici, la fonction imprimante est une fonction imbriquée dans make_printer. Il s'agit d'une fermeture car elle fait référence à la variable locale msg après le retour de make_printer.
Définition de la fermeture
Une fermeture est une fonction qui maintient une référence à une portée englobante, lui permettant d'accéder à des variables qui ne sont pas définies dans sa propre portée. Cette référence est conservée même après la sortie de la portée englobante.
Fonction imbriquée sans fermeture
D'autre part, la fonction imbriquée suivante, qui utilise une valeur par défaut valeur du paramètre, n'est pas une fermeture :
def make_printer(msg): def printer(msg=msg): print(msg) return printer
Dans ce cas, la variable msg est liée à la valeur par défaut lors de la création de l'imprimante, et il ne fait référence à aucune variable en dehors de sa propre portée. Par conséquent, ce n'est pas une fermeture.
Conclusion
Les fonctions imbriquées en Python qui ne répondent pas à la définition de fermeture sont communément appelées « fonctions imbriquées » pour les distinguer à partir de véritables fermetures. Les fermetures peuvent être utiles pour conserver l'état des portées englobantes, tandis que les fonctions imbriquées sans fermeture encapsulent simplement la fonctionnalité dans une portée lexicale.
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!