Google laat me niet zoeken |=
Dus ik heb problemen met het vinden van relevante documentatie. Iedereen weet het?
Antwoord 1, Autoriteit 100%
|=
Voert een In-place + sup>bediening tussen paren objecten. In het bijzonder, tussen:
- sets : een Union bediening
- Dictten : een update bediening
- tellers : a Unie (van Multisets) Bediening
- nummers : a bitwise of , binaire bediening
In de meeste gevallen is het gerelateerd aan de |
operator. Zie hieronder voorbeelden.
sets
Bijvoorbeeld, de Unie van twee toegewezen sets s1
en s2
Deel de volgende gelijkwaardige uitdrukkingen:
>>> s1 = s1 | s2 # 1
>>> s1 |= s2 # 2
>>> s1.__ior__(s2) # 3
waar de uiteindelijke waarde van s1
gelijkwaardig is door:
- een toegewezen of bediening
- een in-place of bewerking
- een in-place of bewerking via speciale methode ++ sup>
Voorbeeld
Hier passen we toe of (|
) en de in-place of (|=
) naar sets :
>>> s1 = {"a", "b", "c"}
>>> s2 = {"d", "e", "f"}
>>> # OR, |
>>> s1 | s2
{'a', 'b', 'c', 'd', 'e', 'f'}
>>> s1 # `s1` is unchanged
{'a', 'b', 'c'}
>>> # In-place OR, |=
>>> s1 |= s2
>>> s1 # `s1` is reassigned
{'a', 'b', 'c', 'd', 'e', 'f'}
Woordenboeken
in python 3,9+ , nieuw Samenvoegen (|
) en update (|=
) Operators worden voorgesteld tussen woordenboeken. Opmerking: deze zijn niet hetzelfde als ingestelde operators die hierboven zijn genoemd.
Gegeven bewerkingen tussen twee toegewezen DICKS d1
EN d2
:
>>> d1 = d1 | d2 # 1
>>> d1 |= d2 # 2
Waar d1
equivalent is via:
- een toegewezen samenvoegbare werking
- een in-place-merge-rechts (update) bediening; gelijk aan
d1.update(d2)
Voorbeeld
Hier passen we samenvoegen (|
) en update (|=
) naar dicts :
>>> 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}
Tellers
De collections.Counter
is gerelateerd aan een wiskundige datastructuur genaamd een multiset(mset). Het is in feite een dictaat van (object, multipliciteit) sleutel-waardeparen.
Gegeven bewerkingen tussen twee toegewezen tellers c1
en c2
:
>>> c1 = c1 | c2 # 1
>>> c1 |= c2 # 2
waar c1
equivalent is via:
- een toegewezen vakbondsoperatie
- een interne vakbondsoperatie
Een vereniging van multisetsbevat de maximale veelvouden per item. Let op, dit werkt niet op dezelfde manier als tussen twee sets of tussen twee gewone dictees.
Voorbeeld
Hier passen we unie (|
) en de in-place unie (|=
) toe op Tellers:
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})
>>> # In-place Union, |=
>>> c1 |= c2
>>> c1
Counter({2: 2, 3: 5, 1: 1})
Cijfers
Ten slotte kun je binaire wiskunde doen.
Gegeven bewerkingen tussen twee toegewezen nummers n1
en n2
:
>>> n1 = n1 | n2 # 1
>>> n1 |= n2 # 2
waar n1
equivalent is via:
- een toegewezen bitsgewijze OF-bewerking
- een interne bitsgewijze OF-bewerking
Voorbeeld
Hier passen we bitsgewijze OR (|
) en de in-place bitsgewijze OR (|=
) toe op getallen:
>>> n1 = 0
>>> n2 = 1
>>> # Bitwise OR, |
>>> n1 | n2
1
>>> n1
0
>>> # In-place Bitwise OR, |=
>>> n1 |= n2
>>> n1
1
Recensie
In dit gedeelte wordt kort wat bitsgewijze wiskunde besproken. In het eenvoudigste geval vergelijkt de bitsgewijze OF-bewerking twee binaire bits. Het zal altijd 1
retourneren, behalve wanneer beide bits 0
zijn.
>>> assert 1 == (1 | 1) == (1 | 0) == (0 | 1)
>>> assert 0 == (0 | 0)
We breiden dit idee nu verder uit dan binaire getallen. Gegeven twee willekeurige gehele getallen (zonder fractionele componenten), passen we de bitsgewijze OR toe en krijgen een integraal resultaat:
>>> a = 10
>>> b = 16
>>> a | b
26
Hoe? Over het algemeen volgen de bitsgewijze bewerkingen enkele “regels”:
- intern binaire equivalenten vergelijken
- pas de bewerking toe
- retourneer het resultaat als het opgegeven type
Laten we deze regels toepassen op onze gewone gehele getallen hierboven.
(1) Vergelijk binaire equivalenten, hier gezien als strings (0b
staat voor binair):
>>> bin(a)
'0b1010'
>>> bin(b)
'0b10000'
(2) Pas een bitsgewijze OF-bewerking toe op elke kolom (0
wanneer beide 0
zijn, anders 1
):
01010
10000
-----
11010
(3) Retourneert het resultaat in het opgegeven type, b.v. grondtal 10, decimaal:
>>> int(0b11010)
26
De interne binaire vergelijking betekent dat we de laatste kunnen toepassen op gehele getallen in elke basis, b.v. hex en octaal:
>>> c = 0xa # 10
>>> d = 0o20 # 16
>>> c | d
26
Zie ook
- Een voorbeeld van overbelasting van de
__ior__()
methodeom iterables te herhalen in eenMutableSet
abstracte basisklasse - R. Hettinger’s OrderedSet recept (zie respectievelijk regel 3 en 10)
- Een thread over Python-ideasover waarom om
|=
te gebruiken om een set bij te werken - Een sectie B.8 van Dive in Python 3over speciale methoden van Python-operators
+De in-place bitsgewijze OR-operator kan niet worden toegepast op letterlijke waarden; wijs objecten toe aan namen.
++Speciale methoden retourneren dezelfde bewerkingen als de bijbehorende operators.
Antwoord 2, autoriteit 96%
In Python en vele andere programmeertalen is |
de bitwise- OF-bewerking. |=
is voor |
zoals +=
is voor +
, dwz een combinatie van bewerking en toewijzing.
Dus var |= value
is een afkorting voor var = var | value
.
Een veelvoorkomend gebruik is het samenvoegen van twee sets:
>>> a = {1,2}; a |= {3,4}; print(a)
{1, 2, 3, 4}
Antwoord 3, autoriteit 47%
In combinatie met sets voert het een samenvoegbewerking uit.
Antwoord 4, autoriteit 39%
Dit is slechts een OF-bewerking tussen de huidige variabele en de andere. Zijnd T=True
en F=False
, zie de output grafisch:
r | s | r|=s |
---|---|---|
T | T | T |
T | F | T |
F | T | T |
F | F | F |
Antwoord 5, autoriteit 8%
Het voert een binaire bitsgewijze OR uit van de linker- en rechterkant van de opdracht en slaat het resultaat vervolgens op in de linkervariabele.
http://docs.python.org/reference/expressions. html#binary-bitwise-operations
Antwoord 6, autoriteit 3%
Het is bitsgewijze of.
Laten we zeggen dat we 32 |= 10
hebben, afbeelding 32 en 10 is binair.
32 = 10 0000
10 = 00 1010
Nu omdat | is of, doe een bitsgewijze of op de twee getallen
d.w.z. 1 of 0 –> 1, 0 of 0 –> 0. Ga hiermee door in de keten
10 0000 | 00 1010 = 10 1010.
Verander nu het binaire getal in een decimaal, 10 1010 = 42.
Voor |=, denk aan de bekende voorbeelden, x +=5
. Het betekent x = x + 5,
dus als we x |= 5
hebben, betekent het x = x bitwiseor with 5
.
Antwoord 7, autoriteit 2%
In Python werkt|=(ior) als uniebewerking.
zoals als x=5 en x|=5, dan wordt beide waarde eerst omgezet in binaire waarde, dan wordt de unie-bewerking uitgevoerd en krijgen we het antwoord 5.
Antwoord 8, autoriteit 2%
Om een use-case te geven (na tijd te hebben besteed aan de andere antwoorden):
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
In principe any
zonder kortsluiting: kan handig zijn als u elk item moet verwerken en ten minste één succes moet vastleggen, enz.
Zie ook de waarschuwingen in dit antwoord