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
Libérer: 2024-12-16 19:03:16
original
220 Les gens l'ont consulté

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if not hasattr(foo, "counter"):
    foo.counter = 0
foo.counter += 1
print("Counter is", foo.counter)
Copier après la connexion

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">def decorate(func):
    for k in kwargs:
        setattr(func, k, kwargs[k])
    return func
return decorate
Copier après la connexion

@static_vars(counter=0)
def foo():

foo.counter += 1
print("Counter is", foo.counter)
Copier après la connexion

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!

source:php.cn
Article précédent:Comment puis-je imprimer joliment des DataFrames et des séries Pandas entières en Python ? Article suivant:Comment puis-je regrouper une colonne Pandas DataFrame et compter les valeurs dans chaque bac ?
Déclaration de ce site Web
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
Derniers articles par auteur
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal