Réponses:
|=effectue une opération en place + entre des paires d'objets. En particulier, entre:
Dans la plupart des cas, il est lié à l' |opérateur. Voir les exemples ci-dessous.
Ensembles
Par exemple, l'union de deux ensembles affectés s1et s2partager les expressions équivalentes suivantes:
>>> s1 = s1 | s12 # 1
>>> s1 |= s2 # 2
>>> s1.__ior__(s2) # 3
où la valeur finale de s1est équivalente soit par:
Exemple
Ici, nous appliquons OR ( |) et OR ( |=) en place aux ensembles :
>>> s1 = {"a", "b", "c"}
>>> s2 = {"d", "e", "f"}
>>> # OR, |
>>> s1 | s2
{'a', 'b', 'c', 'd', 'e', 'f'}
>>> s1 # `s1` is unchanged
{'a', 'b', 'c'}
>>> # Inplace OR, |=
>>> s1 |= s2
>>> s1 # `s1` is reassigned
{'a', 'b', 'c', 'd', 'e', 'f'}
Dictionnaires
Dans Python 3.9+ , de nouveaux opérateurs merge ( |) et update ( |=) sont proposés entre les dictionnaires. Remarque: ce ne sont pas les mêmes que les opérateurs d'ensemble mentionnés ci-dessus.
Opérations données entre deux dicts assignés d1et d2:
>>> d1 = d1 | d2 # 1
>>> d1 |= d2 # 2
où d1est équivalent via:
d1.update(d2)Exemple
Ici, nous appliquons merge ( |) et update ( |=) aux dictionnaires :
>>> d1 = {"a": 0, "b": 1, "c": 2}
>>> d2 = {"c": 20, "d": 30}
>>> # Merge, |
>>> d1 | d2
{"a": 0, "b": 1, "c": 20, "d": 30}
>>> d1
{"a": 0, "b": 1, "c": 2}
>>> # Update, |=
>>> d1 |= d2
>>> d1
{"a": 0, "b": 1, "c": 20, "d": 30}
Compteurs
Le collections.Counterest lié à une structure de données mathématique appelée multiset (mset). Il s'agit essentiellement d'un dict de paires clé-valeur (objet, multiplicité).
Opérations données entre deux compteurs assignés c1et c2:
>>> c1 = c1 | c2 # 1
>>> c1 |= c2 # 2
où c1est équivalent via:
Une union de multisets contient les multiplicités maximales par entrée. Notez que cela ne se comporte pas de la même manière qu'entre deux ensembles ou entre deux dictionnaires réguliers.
Exemple
Ici, nous appliquons union ( |) et l'union sur place ( |=) aux compteurs :
import collections as ct
>>> c1 = ct.Counter({2: 2, 3: 3})
>>> c2 = ct.Counter({1: 1, 3: 5})
>>> # Union, |
>>> c1 | c2
Counter({2: 2, 3: 5, 1: 1})
>>> c1
Counter({2: 2, 3: 3})
>>> # Inplace Union, |=
>>> c1 |= c2
>>> c1
Counter({2: 2, 3: 5, 1: 1})
Nombres
Enfin, vous pouvez faire des calculs binaires.
Opérations données entre deux numéros attribués n1et n2:
>>> n1 = n1 | n2 # 1
>>> n1 |= n2 # 2
où n1est équivalent via:
Exemple
Ici, nous appliquons le OR bit à bit ( |) et le OR bit à la place ( |=) aux nombres :
>>> n1 = 0
>>> n2 = 1
>>> # Bitwise OR, |
>>> n1 | n2
1
>>> n1
0
>>> # Inplace Bitwise OR, |=
>>> n1 |= n2
>>> n1
1
La revue
Cette section passe brièvement en revue quelques mathématiques au niveau du bit. Dans le cas le plus simple, l'opération OR au niveau du bit compare deux bits binaires. Il retournera toujours 1sauf lorsque les deux bits le sont 0.
>>> assert 1 == (1 | 1) == (1 | 0) == (0 | 1)
>>> assert 0 == (0 | 0)
Nous étendons maintenant cette idée au-delà des nombres binaires. Étant donné deux nombres entiers quelconques (sans composantes fractionnaires), nous appliquons le OU au niveau du bit et obtenons un résultat intégral:
>>> a = 10
>>> b = 16
>>> a | b
26
Comment? En général, les opérations au niveau du bit suivent certaines "règles":
Appliquons ces règles à nos entiers réguliers ci-dessus.
(1) Comparez les équivalents binaires, vus ici sous forme de chaînes ( 0bdésigne le binaire):
>>> bin(a)
'0b1010'
>>> bin(b)
'0b10000'
(2) Appliquez une opération OR au niveau du bit à chaque colonne ( 0lorsque les deux sont 0, sinon 1):
01010
10000
-----
11010
(3) Renvoie le résultat dans le type donné, par exemple base 10, décimal:
>>> int(0b11010)
26
La comparaison binaire interne signifie que nous pouvons appliquer ce dernier à des entiers dans n'importe quelle base, par exemple hex et octal:
>>> c = 0xa
>>> d = 0o32
>>> c | d
26
Voir également
__ior__()méthode pour itérer des itérables dans une MutableSetclasse de base abstraite|=pour mettre à jour un ensemble+ L'opérateur OR au niveau du bit en place ne peut pas être appliqué aux littéraux; affecter des objets aux noms.
++ Les méthodes spéciales renvoient les mêmes opérations que leurs opérateurs correspondants.
ints ne sont pas mutables en Python.
En Python, et dans de nombreux autres langages de programmation, se |trouve l' opération OR au niveau du bit . |=est à |tel quel, c'est- +=à +-dire une combinaison d'opération et d'affectation.
Donc var |= valuec'est court pour var = var | value.
Un cas d'utilisation courant consiste à fusionner deux ensembles:
>>> a = {1,2}; a |= {3,4}; print(a)
{1, 2, 3, 4}
Lorsqu'il est utilisé avec des ensembles, il effectue une opération d'union.
|=été utilisé dans un contexte défini, et ce n'est que lorsque j'ai déconné et compris que j'ai remarqué que cette réponse était ici aussi
Il s'agit simplement d'une opération OR entre la variable courante et l'autre. Étant T=Trueet F=False, voyez la sortie graphiquement:
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
|est un opérateur bit à bit pour les entiers, pas spécifiquement un opérateur booléen, et pour tout autre chose que bools, il ne produira Trueni ne sortira réellement False. boolest une sous-classe de int, et pour être gentil, ils l'ont surchargée pour boolcontinuer à produire True/ Falsesorties, mais dans la plupart des cas, les opérations booléennes devraient être effectuées avec or, pas |. Les utilisations normales de |sont bitwise-or, ou set-union. De meilleurs exemples d'utilisation seraient quelque chose comme a = 0b1001; a |= 0b0010; print(bin(a))qui produit 0b1011.
Il effectue un OU binaire au niveau du bit des 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
C'est au niveau du bit ou. Disons que nous avons 32 |= 10, les images 32 et 10 sont binaires.
32 = 10 0000
10 = 00 1010
Maintenant parce que | est ou, faites un bit ou sur les deux nombres
c'est-à-dire 1 ou 0 -> 1, 0 ou 0 -> 0. Continuez le long de la chaîne
10 0000 | 00 1010 = 10 1010.
Maintenant changez le binaire en décimal, 10 1010 = 42.
Pour | =, pensez des exemples connus, x +=5. Cela signifie x = x + 5,donc si nous avons x |= 5, cela signifie x = x bitwiseor with 5.
32 |= 10mais plutôt 32 | 10. Juste pour clarifier cela pour les futurs lecteurs :)
Pour donner un cas d'utilisation (après avoir passé du temps avec les autres réponses):
def process(item):
return bool(item) # imagine some sort of complex processing taking place above
def any_success(data): # return True if at least one is successful
at_least_one = False
for item in data:
at_least_one |= process(item)
return at_least_one
>>> any_success([False, False, False])
False
>>> any_success([True, False, False])
True
>>> any_success([False, True, False])
True
Fondamentalement, anysans le court-circuit: cela peut être utile si vous devez traiter chaque élément et enregistrer au moins un succès, etc.
Voir aussi les mises en garde dans cette réponse
|est également utilisé comme opérateur d'union d'ensemble