Python utilise des fermetures pour simuler les effets de variables locales statiques c

c variables locales statiques

Les variables locales statiques en langage C ne sont initialisées qu'une seule fois lorsqu'elles sont utilisées pour la première fois. Les exemples sont les suivants:

#include <stdio.h>

int next_num()
{
    
    
    static int a = 0;
    return ++a;
}

int main()
{
    
    
    for (int i = 0; i < 5; i++)
    {
    
    
        printf("%d\n",next_num());
    }
}

Résultats de la

1
2
3
4
5

Python utilise des fermetures pour obtenir le même effet

Code

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def instantiate(func):
    return func()


@instantiate
def next_num():
    a = 0

    def inner():
        nonlocal a
        a += 1
        return a
    return inner


if __name__ == "__main__":
    for i in range(5):
        print(next_num())

Résultats de la

1
2
3
4
5

Comprendre les fermetures

Pour comprendre les fermetures, nous devons d'abord comprendre la portée des variables.

def test():
    a = 0
    return a

Dans le code ci-dessus, la variable a est initialisée lorsque la fonction de test est appelée, et détruite après la fin de l'appel.C'est le cycle de vie d'une variable locale normale.

Cependant, s'il existe une fonction de référence à un test interne, alors a ne sera pas détruit après la fin de l'appel de test.

def test():
    a = 0
    def inner():
        return a
    return a

Autrement dit: la
fonction interne fait référence à la variable à l'intérieur de la fonction externe, de sorte que la variable existe au-delà du cycle de vie normal. Cette situation s'appelle une fermeture. (La compréhension est bonne)

Je suppose que tu aimes

Origine blog.csdn.net/sinat_38682860/article/details/108710962
conseillé
Classement