Exécuter une fonction une seule fois en Python #
Pour exécuter une fonction une seule fois :
- Déclarez une variable globale et initialisez-la à
False
. - Changez la valeur de la variable globale en
True
dans la fonction. - N’exécutez le code de la fonction que si la variable globale a pour valeur
False
.
sum_has_run = False
def sum(a, b):
global sum_has_run
if sum_has_run:
return
sum_has_run = True
return a + b
print(sum(100, 100))
print(sum(100, 100))
def sum(a, b):
if getattr(sum, 'has_run', False):
return
sum.has_run = True
return a + b
print(sum(100, 100))
print(sum(100, 100))
Le premier exemple utilise une variable globale pour exécuter une fonction une seule fois.
Nous initialisons la variable globale à False
et définissons sa valeur à True
dans la fonction.
Si la valeur de la variable globale est égale à True
nous retournons directement de la
fonction directement.
sum_has_run = False
def sum(a, b):
global sum_has_run
if sum_has_run:
return
sum_has_run = True
return a + b
print(sum(100, 100))
print(sum(100, 100))
Si la valeur de la variable globale n’est pas égale à True
nous lui donnons la valeur suivante True
et exécutons la fonction.
Cela ne se produit que la première fois que la fonction est invoquée.
Une fois que la variable globale est définie sur True
la fonction renvoie None
sans
exécuter aucun code.
Une autre approche consiste à utiliser un attribut sur la fonction.
Pour exécuter une fonction une seule fois :
- Définir un
has_run
sur la fonction pourTrue
la première fois qu’elle est exécutée. - A chaque fois que la fonction est appelée, vérifiez si la fonction
has_run
estTrue
et revenir immédiatement. - Le code de la fonction ne s’exécutera que la première fois.
def sum(a, b):
if getattr(sum, 'has_run', False):
return
sum.has_run = True
return a + b
print(sum(100, 100))
print(sum(100, 100))
Nous avons défini le has_run
à l’attribut True
la première fois que la fonction est appelée.
La fonction getattr
renvoie la valeur de l’attribut fourni de l’objet.
La fonction prend comme paramètres l’objet, le nom de l’attribut et une valeur par défaut pour le cas où l’attribut n’existe pas sur l’objet.
lorsque l’attribut n’existe pas sur l’objet.
Si la fonction has_run
n’est pas défini sur la fonction, nous retournons une valeur par défaut
de False
.
Nous vérifions la valeur de l’élément has_run
à chaque fois que la fonction s’exécute et si sa valeur est fixée à True
nous revenons directement de la fonction.
Si le has_run
n’est pas défini, le code de la fonction s’exécute et définit l’attribut
l’attribut à True
.
Le code de la fonction n’est exécuté qu’une seule fois.