Python >> Tutoriel Python >  >> Python

Python |=Opérateur OU sur place

Êtes-vous tombé sur l'étrange opérateur Python A |= B dans un extrait de code et vous ne savez pas ce que cela signifie ? Cet article va le clarifier une bonne fois pour toutes ! Commençons par la réponse courte :

A |= B de Python applique le | opérateur en place. Ainsi, il est sémantiquement identique à la version plus longue A = A | B d'effectuer en premier l'opération A | B puis en affectant le résultat à la variable A .

L'exemple minimal suivant crée deux variables booléennes A et B et exécute le B |= A sur place opération pour effectuer une opération OU logique B | A et affectant le résultat au premier opérande B qui devient True :

>>> A = True
>>> B = False
>>> B |= A
>>> B
True

Dans cet exemple, vous avez vu cette opération sur place sur des opérandes booléens. Mais le | L'opérateur est surchargé en Python. Les trois cas d'utilisation les plus fréquents du | et |= les opérateurs sont les suivants :

  • Ensembles Python :définir l'opérateur union
  • Python Dictionnaires :opérateur de mise à jour du dictionnaire
  • Python Booléens :opérateur logique OU

Plongeons-nous dans chacun d'eux un par un.

|=sur les ensembles Python

set.union(set_1, set_2, ...) de Python crée et retourne un nouvel ensemble composé des éléments qui sont membres de tout des ensembles concernés. Une notation abrégée pour l'opérateur d'union d'ensemble est le | opérateur comme dans set_1 | set_2 | set_3 . Le set_1 |= set_2 effectue l'opérateur d'union d'ensemble sur place - il remplace l'ensemble donné comme premier opérande.

Par exemple, les trois expressions suivantes sont sémantiquement équivalentes :elles effectuent toutes l'union d'ensembles set_1 et set_2 et affectez le résultat au set_1 variables.

>>> set_1 = set_1 | set_2
>>> set_1 |= set_2
>>> set_1.__ior__(set_2)

La première opération est une opération OU affectée. La deuxième opération est un OU sur place. La troisième est une opération sur place utilisant une méthode spéciale "dunder".

L'exemple minimal suivant montre comment set_1 est mis à jour avec l'union des deux ensembles, en place :

>>> set_1 = {'Alice'}
>>> set_2 = {'Bob', 'Alice', 1, 2, 3}
>>> set_1 |= set_2
>>> set_1
{1, 2, 3, 'Bob', 'Alice'}

|=sur les dictionnaires

Python 3.9 a introduit les opérateurs de fusion et de mise à jour sur les dictionnaires.

  • dict_1 | dict_2 crée un nouveau dictionnaire avec tous les éléments dans dict_1 et dict_2 . Le deuxième opérande a priorité sur le premier, donc si une clé existe dans les deux dictionnaires, Python utilise la paire (clé, valeur) du deuxième dictionnaire.
  • dict_1 |= dict_2 met à jour le premier dictionnaire dict_1 avec les mêmes éléments de dictionnaire fusionnés.

Dans l'exemple suivant, nous avons mis à jour le premier dictionnaire avec les paires (clé, valeur) du deuxième dictionnaire :

d1 = {'Alice': 42, 'Bob': 18}
d2 = {'Alice': 18, 'Carl': 22}
d1 |= d2
print(d1)

La sortie est le dictionnaire mis à jour

{'Alice': 18, 'Bob': 18, 'Carl': 22}

|=sur les booléens

Le Python |= opérateur lorsqu'il est appliqué à deux valeurs booléennes A et B effectue l'opération OU logique A | B et affecte le résultat au premier opérande A . Par conséquent, l'opérande A est False si les deux A et B sont False et True Par ailleurs.

Ceci est illustré dans l'exemple suivant où la variable B est mise à jour avec le résultat de l'opération B | A en utilisant l'opération OU booléenne sur place B |= A .

>>> A = True
>>> B = False
>>> B |= A
>>> B
True

Opérateurs Python sur place

Opérateurs d'affectation sur place (également appelés composés opérateurs d'affectation) effectuent une opération sur place sur une variable fournie comme premier opérande. Ils remplacent la valeur de la première variable d'opérande par le résultat de l'opération lors de l'exécution de l'opérateur sans affectation. Par exemple, x += 3 est identique à x = x + 3 du premier calcul du résultat de x +3 puis en l'affectant à la variable x.

Opérateur Nom Exemple court Exemple long équivalent
= Affectation sur place x = 3
+= Ajout sur place x += 3 x = x + 3
-= Soustraction sur place x -= 3 x = x - 3
*= Multiplication sur place x *= 3 x = x * 3
/= Division sur place x /= 3 x = x / 3
%= Modulo sur place x %= 3 x = x % 3
//= Division entière en place x //= 3 x = x // 3
**= Alimentation sur place x **= 3 x = x ** 3
&= Et au niveau du bit sur place x &= 3 x = x & 3
|= Ou binaire sur place x |= 3 x = x | 3
^= XOR au niveau du bit sur place x ^= 3 x = x ^ 3
>>= Décalage bit à droite sur place x >>= 3 x = x >> 3
<<= Décalage bit à gauche sur place x <<= 5 x = x << 5

Résumé

A |= B de Python applique le | opérateur en place. Ainsi, il est sémantiquement identique à la version plus longue A = A | B d'effectuer en premier l'opération A | B puis en affectant le résultat à la variable A .

Le | est le plus souvent utilisé comme l'un des suivants :

  • Ensembles Python :définir l'opérateur union
  • Python Dictionnaires :opérateur de mise à jour du dictionnaire
  • Python Booléens :opérateur logique OU