Maison >développement back-end >Tutoriel Python >Comment puis-je simuler des variables statiques dans des fonctions Python ?

Comment puis-je simuler des variables statiques dans des fonctions Python ?

DDD
DDDoriginal
2024-12-16 19:03:16221parcourir

How Can I Simulate Static Variables in Python Functions?

Variables statiques dans les fonctions Python : imitation de C/C

En C/C, les fonctions peuvent déclarer des variables statiques pour maintenir l'état lors des appels de fonction. Python, en revanche, ne prend pas en charge les variables statiques dans les fonctions par défaut.

Implémentation de variables statiques dans les fonctions Python

Pour reproduire le comportement des variables statiques dans les fonctions Python, utilisez ce qui suit approche :

<br>def foo():</p>
<pre class="brush:php;toolbar:false">if not hasattr(foo, "counter"):
    foo.counter = 0
foo.counter += 1
print("Counter is", foo.counter)

Ici, nous vérifions l'existence de l'attribut "counter" à l'intérieur de la fonction. S'il n'existe pas, on l'initialise à 0. Ce code d'initialisation est exécuté au début du premier appel de fonction.

Approche Décorateur

Pour améliorer la lisibilité et déplacer le code d'initialisation vers le dessus, on peut utiliser un décorateur :

<br>def static_vars(**kwargs):</p>
<pre class="brush:php;toolbar:false">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
print("Counter is", foo.counter)

La portée de la classe affecte-t-elle les variables statiques ?

Placer la fonction à l'intérieur d'une classe ne modifier l'implémentation des variables statiques. Les variables statiques seront toujours spécifiques à une fonction et non à une classe.

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