Problème :
Comment Python implémente-t-il des variables statiques dans des fonctions, similaires à C/C ' s variables membres statiques définies dans la fonction niveau ?
Réponse :
En Python, il n'y a pas d'équivalent direct pour les variables statiques dans les fonctions. Cependant, une fonctionnalité similaire peut être obtenue en utilisant une combinaison de fonctions imbriquées et de fermetures :
def foo(): def counter(): if not hasattr(foo, "counter_value"): foo.counter_value = 0 foo.counter_value += 1 return foo.counter_value return counter
Ici, la fonction foo() définit une fonction imbriquée counter(). La fonction externe foo() sert de fermeture à counter(), lui fournissant un espace de noms isolé.
Pour accéder et incrémenter le compteur, vous appelleriez :
counter = foo() counter() # Initializes the counter counter() # Increments the counter
Approche du décorateur :
Une autre approche consiste à utiliser un décorateur pour créer un statique variable :
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate @static_vars(counter=0) def foo(): foo.counter += 1 return foo.counter
Cette syntaxe vous permet d'initialiser et d'accéder plus facilement à la variable statique, mais elle nécessite l'utilisation de foo. préfixe.
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!