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

Comment pouvons-nous simuler des variables statiques dans des fonctions Python ?

Susan Sarandon
Libérer: 2024-12-06 13:59:09
original
432 Les gens l'ont consulté

How Can We Simulate Static Variables in Python Functions?

Utilisation de variables statiques dans les fonctions Python

En C/C, les variables statiques jouent un rôle crucial dans la conservation des valeurs lors des invocations de fonctions. Python ne possède cependant pas d’équivalent explicite à ce concept. Par conséquent, comment pouvons-nous implémenter efficacement des variables statiques dans les fonctions Python ?

L'approche idiomatique de Python implique la manipulation de variables au niveau de la classe. Ceci peut être réalisé en définissant une classe qui encapsule la fonction et son état associé. Cependant, dans les scénarios où l'utilisation de classes n'est pas souhaitable, des méthodes alternatives doivent être employées.

Une solution de contournement consiste à exploiter l'espace de noms de la fonction, comme illustré ci-dessous :

def foo():
    if not hasattr(foo, "counter"):
        foo.counter = 0
    foo.counter += 1
    print("Counter is %d" % foo.counter)
Copier après la connexion

Cet extrait de code définit un compteur dans l'espace de noms de la fonction, garantissant qu'il persiste à travers les appels. Cependant, cela nécessite une initialisation explicite lors de la première invocation.

Pour une approche plus concise et personnalisée, des décorateurs peuvent être employés. Le décorateur suivant crée des variables statiques et les initialise en fonction des arguments de mot-clé spécifiés :

def static_vars(**kwargs):
    def decorate(func):
        for k in kwargs:
            setattr(func, k, kwargs[k])
        return func
    return decorate
Copier après la connexion

Ce décorateur peut être utilisé comme suit :

@static_vars(counter=0)
def foo():
    foo.counter += 1
    print("Counter is %d" % foo.counter)
Copier après la connexion

En exploitant ce décorateur, l'initialisation du compteur le code peut être placé en haut de la définition de la fonction, offrant une implémentation plus intuitive et lisible.

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
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal