Maison  >  Article  >  développement back-end  >  Comment les fermetures sont-elles implémentées en Python ?

Comment les fermetures sont-elles implémentées en Python ?

WBOY
WBOYoriginal
2023-10-21 10:33:561051parcourir

Comment les fermetures sont-elles implémentées en Python ?

Comment les fermetures sont-elles implémentées en Python ?

Une fermeture est une fonction définie à l'intérieur d'une fonction et fait référence aux variables de la fonction externe à l'intérieur de la fonction. Cette fonctionnalité permet à la fonction interne d'accéder aux variables de la fonction externe, et une fois l'exécution de la fonction externe terminée, la fermeture peut toujours accéder et faire fonctionner les variables de la fonction externe.

Les fermetures sont implémentées en Python en suivant les étapes suivantes :

  1. Définir une fonction externe et définir une fonction interne à l'intérieur : Tout d'abord, nous devons définir une fonction interne à l'intérieur de la fonction externe. Cette fonction intérieure est la fermeture.

    def outer_function():
     # 定义内部函数
     def inner_function():
         pass
  2. La fonction interne fait référence aux variables de la fonction externe : Dans la fonction interne, nous devons faire référence aux variables de la fonction externe. Vous pouvez utiliser les variables de la fonction externe comme paramètres de la fonction interne ou utiliser les variables de la fonction externe directement à l'intérieur de la fonction interne.

    def outer_function():
     # 外部函数的变量
     x = 10
     # 定义内部函数
     def inner_function():
         # 引用外部函数的变量
         print(x)
  3. Fonction interne de retour : dans la fonction externe, renvoie la fonction interne comme valeur de retour.

    def outer_function():
     # 外部函数的变量
     x = 10
     # 定义内部函数
     def inner_function():
         # 引用外部函数的变量
         print(x)
     # 返回内部函数
     return inner_function
  4. Appelez des fonctions externes pour générer des fermetures : générez des fermetures en appelant des fonctions externes. À ce stade, la fonction interne fait référence aux variables de la fonction externe et peut continuer à accéder à ces variables et à les utiliser une fois l'exécution de la fonction externe terminée.

    def outer_function():
     # 外部函数的变量
     x = 10
     # 定义内部函数
     def inner_function():
         # 引用外部函数的变量
         print(x)
     # 返回内部函数
     return inner_function
    
    # 调用外部函数,生成闭包
    closure = outer_function()

    Grâce aux étapes ci-dessus, nous avons implémenté avec succès des fermetures en Python. À ce stade, nous pouvons accéder et manipuler les variables de la fonction externe en appelant la fermeture.

    closure()  # 输出:10

    Une caractéristique importante des fermetures est qu'une fois l'exécution de la fonction externe terminée, la fermeture peut toujours accéder et faire fonctionner les variables de la fonction externe. En effet, la fermeture conserve une référence à la variable de fonction externe au lieu de copier la valeur de la variable. Par conséquent, nous pouvons observer le comportement d’une fermeture en l’appelant plusieurs fois.

    def outer_function():
     # 外部函数的变量
     x = 10
     # 定义内部函数
     def inner_function():
         # 引用外部函数的变量
         print(x)
     # 返回内部函数
     return inner_function
    
    # 调用外部函数,生成闭包
    closure = outer_function()
    
    closure()  # 输出:10
    
    # 修改外部函数的变量
    outer_function.x = 20
    
    closure()  # 输出:20

    Grâce au code ci-dessus, nous pouvons voir que la fermeture affichera les variables de la fonction externe lorsqu'elle est appelée, même une fois l'exécution de la fonction externe terminée, la fermeture peut toujours accéder et faire fonctionner les variables de la fonction externe.

L'implémentation de la fermeture en Python est simple et claire Grâce au mécanisme d'imbrication de fonctions et de référencement de variables externes, la fonction a une capacité de mémoire et de persistance. C'est l'une des raisons pour lesquelles les fermetures sont largement utilisées en Python.

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