En Python, imiter le comportement des variables statiques dans les fonctions, comme on le voit dans des langages comme C/C, peut initialement ressembler à une tâche embarrassante. Cependant, il existe plusieurs approches pour obtenir cette fonctionnalité.
Une solution consiste à utiliser l'espace de noms de la fonction elle-même. En attribuant un attribut à l'objet fonction, nous créons effectivement une variable statique dans sa portée. Considérez le code suivant :
def foo(): foo.counter += 1 print("Counter is %d" % foo.counter) foo.counter = 0
Cette approche initialise la variable compteur en dehors de la fonction et l'assigne à l'espace de noms de l'objet fonction. Par conséquent, chaque appel à foo() incrémente le compteur de un, conservant son état même après plusieurs invocations.
Vous pouvez également utiliser une fonction de décorateur pour automatiser la création de variables statiques. Le décorateur suivant, static_vars(), prend les arguments de mots-clés et les définit comme attributs de la fonction décorée :
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate
En utilisant ce décorateur, vous pouvez écrire la fonction foo() comme suit :
@static_vars(counter=0) def foo(): foo.counter += 1 print("Counter is %d" % foo.counter)
Le décorateur garantit que la variable compteur est initialisée une fois et reste associée à la fonction foo().
Bien que ces méthodes émulent efficacement les statiques variables au niveau de la fonction, il convient de noter que contrairement à C/C , les fonctions Python ne sont pas liées à une instance d'objet particulière. Par conséquent, le foo. Le préfixe est nécessaire lors de l'accès à la variable statique, car il est toujours associé à l'objet fonction lui-même.
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!