Opérateur d'affectation conditionnelle en Python
-
Signification de l’opérateur
||=
en Ruby -
Implémenter l’opérateur d’affectation conditionnelle
||=
de Ruby en Python à l’aide de l’instructiontry...except
-
Implémenter l’opérateur d’affectation conditionnelle
||=
de Ruby en Python à l’aide de variableslocals
etglobals
Il n’y a pas d’équivalent exact de l’opérateur ||=
de Ruby en Python. Cependant, nous pouvons utiliser la méthode try...except
et les concepts de variables locales et globales pour émuler l’opérateur d’affectation conditionnelle de Ruby ||=
en Python.
Signification de l’opérateur ||=
en Ruby
x ||= y
La signification de base de cet opérateur est d’affecter la valeur de la variable y
à la variable x
si la variable x
n’est pas définie ou a une valeur false
, sinon aucune opération d’affectation n’est effectuée.
Mais cet opérateur est beaucoup plus complexe et déroutant que d’autres opérateurs conditionnels plus simples comme +=
, -=
car chaque fois qu’une variable est rencontrée comme non définie, la console renvoie NameError
.
a+=b
est évalué à a=a+b
.
a||=b
ressemble à a=a||b
mais se comporte en fait comme a||a=b
.
Implémenter l’opérateur d’affectation conditionnelle ||=
de Ruby en Python à l’aide de l’instruction try...except
Nous utilisons try...except
pour détecter et gérer les erreurs. Chaque fois que le bloc try...except
s’exécute, dans un premier temps, le code se trouvant dans le bloc try
s’exécute. Si le bloc de code dans le bloc try
s’exécute avec succès, le bloc except
est ignoré ; sinon, le code du bloc except
sera exécuté, et l’erreur est gérée. L’opérateur ||=
de Ruby peut être grossièrement traduit dans la méthode try-catch
de Python par :
try:
x
except NameError:
x = 10
Ici, si la variable x
est définie, le bloc try
s’exécutera en douceur sans exception NameError
. Par conséquent, aucune opération d’affectation n’est effectuée. Si x
n’est pas défini, le bloc try
générera NameError
, puis le bloc except
est exécuté et la variable x
est affectée à 10
.
Implémenter l’opérateur d’affectation conditionnelle ||=
de Ruby en Python à l’aide de variables locals
et globals
La portée des variables locales est confinée dans une portée de code spécifique, tandis que les variables globales ont leur portée définie dans l’ensemble de l’espace de code.
Toutes les variables locales dans une portée particulière sont disponibles comme clés du dictionnaire locals
dans cette portée particulière. Toutes les variables globales sont stockées en tant que clés du dictionnaire globals
. Nous pouvons accéder à ces variables chaque fois que nécessaire en utilisant les dictionnaires locals
et globals
.
Nous pouvons vérifier si une variable existe dans l’un des dictionnaires et définir sa valeur uniquement si elle n’existe pas pour traduire l’opérateur d’affectation conditionnelle ||=
de Ruby en Python.
if x in locals().keys():
locals().get(x)
elif x in globals().keys():
globals().get(x)
else:
x = 10
Ici, si la variable x
est présente dans la portée globale ou locale, nous n’effectuons aucune opération d’affectation ; sinon, on attribue la valeur de x
à 10
. Il est similaire à x||=10
en Ruby.