Google ne me laissera pas chercher | = je ne parviens donc pas à trouver la documentation pertinente. Quelqu'un sait?
En Python et dans de nombreux autres langages de programmation, |
est l'opération bitwise-OR . |=
est à |
comme +=
est à +
, c’est-à-dire une combinaison d’opération et d’affectation.
var |= value
est l'abréviation de var = var | value
Lorsqu'il est utilisé avec des ensembles, il effectue une opération d'union.
Ceci est juste une opération OR entre la variable en cours et l’autre. Étant T=True
et F=False
, voyez le résultat sous forme graphique:
r s r|=s
--------------
T T T
T F T
F T T
F F F
Par exemple:
>>> r=True
>>> r|=False
>>> r
True
>>> r=False
>>> r|=False
>>> r
False
>>> r|=True
>>> r
True
|=
effectue une opération inplace, bitwise OR et exécute également union opération de Python sets .
Par exemple, l'union de deux ensembles x
et y
partage les expressions équivalentes suivantes:
>>> x = x | y # (1)
>>> x |= y # (2)
>>> x.__ior__(y) # (3)
où la valeur finale de x
est équivalente soit par:
Voir aussi la section B.8 de Dive in Python 3 sur les méthodes spéciales des opérateurs Python.
Voici quelques exemples comparant OR (|
) et le inplace OR (|=
) appliqué aux ensembles:
>>> x = {"a", "b", "c"}
>>> y = {"d", "e", "f"}
>>> # OR, |
>>> x | y
{'a', 'b', 'c', 'd', 'e', 'f'}
>>> x # `x` is unchanged
{'a', 'b', 'c'}
>>> # Inplace OR, |=
>>> x |= y
>>> x # `x` is reassigned
{'a', 'b', 'c', 'd', 'e', 'f'}
Voici un exemple de surcharge de la méthode __ior__()
pour itérer des itérables dans une classe de base abstraite MutableSet
. Voir aussi sous-classé et appliqué dans la recette OrderedSet de Raymond Hettinger (voir lignes 3 et 10 respectivement) . Voici un fil sur Python-ideas sur pourquoi utiliser |=
pour mettre à jour un ensemble.
Il effectue une opération binaire OR binaire entre les côtés gauche et droit de l'affectation, puis stocke le résultat dans la variable gauche.
http://docs.python.org/reference/expressions.html#binary-bitwise-operations
En Python, | = (ior) fonctionne comme une opération d'union . Comme si x = 5 et x | = 5, la valeur sera d'abord convertie en valeur binaire, puis l'opération d'union sera effectuée et nous obtiendrons la réponse 5.
Pour donner un cas d'utilisation (après avoir passé du temps avec les autres réponses):
def has_some_property(item):
fake_test_result = bool(item)
return fake_rest_result
def lmk(data): # let_me_know_if_at_least_one_succeeds
at_least_one = False
for item in data:
at_least_one |= has_some_property(item)
return at_least_one
>>> lmk([False, False, False])
False
>>> lmk([True, False, False])
True
>>> lmk([False, True, False])
True
Voir aussi les mises en garde dans cette réponse
C'est au niveau des bits ou . Disons que nous avons 32 |= 10
, les images 32 et 10 étant binaires.
32 = 10 0000
10 = 00 1010
Maintenant parce que | est ou, faites un bitwise ou sur les deux nombres
c'est-à-dire 1 ou 0 -> 1, 0 ou 0 -> 0. Continuez dans cette chaîne
10 0000 | 00 1010 = 10 1010.
Maintenant changez le binaire en décimal, 10 1010 = 42.
Pour | =, pensez aux exemples connus, x +=5
. Cela signifie x = x + 5,
donc si nous avons x |= 5
, cela signifie x = x bitwiseor with 5
.