Opérateur d'affectation conditionnelle en Python

Bhuwan Bhatt 30 janvier 2023
  1. Signification de l’opérateur ||= en Ruby
  2. Implémenter l’opérateur d’affectation conditionnelle ||= de Ruby en Python à l’aide de l’instruction try...except
  3. Implémenter l’opérateur d’affectation conditionnelle ||= de Ruby en Python à l’aide de variables locals et globals
Opérateur d'affectation conditionnelle en Python

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.

Article connexe - Python Operator