In Python 3.9+ neues Merge ( |) und Update (|= Operatoren ) zwischen Wörterbüchern vorgeschlagen. Hinweis: Dies sind nicht die gleichen wie die oben genannten Set-Operatoren.
Gegebene Operationen zwischen zwei zugewiesenen Dikten d1und d2:
>>> d1 = d1 | d2 # 1>>> d1 |= d2 # 2
wo d1ist äquivalent über:
eine zugewiesene Zusammenführungsrechtsoperation
eine direkte Zusammenführungsrechtsoperation (Aktualisierung); gleichwertigd1.update(d2)
Beispiel
Hier wenden wir merge ( |) und update ( |=) auf Diktate an :
Das collections.Counterhängt mit einer mathematischen Datenstruktur zusammen, die als Multiset bezeichnet wird (mset) bezeichnet wird. Es ist im Grunde ein Diktat von (Objekt, Multiplizität) Schlüssel-Wert-Paaren.
Gegebene Operationen zwischen zwei zugewiesenen Zählern c1und c2:
>>> c1 = c1 | c2 # 1>>> c1 |= c2 # 2
wo c1ist äquivalent über:
eine zugewiesene Gewerkschaftsoperation
eine In-Place-Gewerkschaftsoperation
Eine Vereinigung von Multisets enthält die maximalen Multiplizitäten pro Eintrag. Beachten Sie, dass sich dies nicht wie zwischen zwei Sätzen oder zwischen zwei regulären Diktaten verhält.
Beispiel
Hier wenden wir union ( |) und die in-place union ( |=) auf Zähler an :
In diesem Abschnitt wird kurz auf die bitweise Mathematik eingegangen. Im einfachsten Fall vergleicht die bitweise ODER-Verknüpfung zwei Binärbits. Es wird immer zurückgegeben, 1außer wenn beide Bits sind 0.
>>>assert1==(1|1)==(1|0)==(0|1)>>>assert0==(0|0)
Wir erweitern diese Idee nun über Binärzahlen hinaus. Bei zwei beliebigen Integralzahlen (ohne Bruchkomponenten) wenden wir das bitweise ODER an und erhalten ein Integralergebnis:
>>> a =10>>> b =16>>> a | b
26
Wie? Im Allgemeinen folgen die bitweisen Operationen einigen "Regeln":
intern binäre Äquivalente vergleichen
Wenden Sie die Operation an
Geben Sie das Ergebnis als angegebenen Typ zurück
Wenden wir diese Regeln auf unsere regulären Ganzzahlen an.
(1) Vergleichen Sie binäre Äquivalente, die hier als Zeichenfolgen betrachtet werden ( 0bbezeichnet binär):
>>> bin(a)'0b1010'>>> bin(b)'0b10000'
(2) Wenden Sie eine bitweise ODER-Verknüpfung auf jede Spalte an ( 0wenn beide 0, sonst 1):
0101010000-----11010
(3) Geben Sie das Ergebnis in dem angegebenen Typ zurück, z. B. Basis 10, dezimal:
>>> int(0b11010)26
Der interne binäre Vergleich bedeutet, dass wir letztere auf ganze Zahlen in jeder Basis anwenden können, z. B. hexadezimal und oktal:
>>> c =0xa>>> d =0o32>>> c | d
26
Siehe auch
Ein Beispiel für das Überladen der __ior__()Methode zum Iterieren von Iterables in einer MutableSetabstrakten Basisklasse
Um ganz klar zu sein, möchte ich der Demonstration hinzufügen, dass sich nach der regulären Zuweisung (x = x | y) die ID (x) geändert hat, weil es sich um ein neues Objekt handelt, während | = dieselbe ID beibehält, weil es das ursprüngliche x ist wird geändert, daher der Name "inplace".
Florimond
1
Dies sollte die beste Antwort sein - sie ist die umfassendste.
Nick
Im Zahlenbereich behaupten Sie, dass die zweite Anweisung direkt ausgeführt wird. Ich denke, es ist nicht wahr, da ints in Python nicht veränderbar sind.
Asocia
106
In Python und vielen anderen Programmiersprachen |ist die bitweise ODER-Verknüpfung . |=ist zu |wie es +=ist +, dh eine Kombination aus Betrieb und Zuordnung.
Also var |= valueist kurz für var = var | value.
Ein häufiger Anwendungsfall ist das Zusammenführen von zwei Sätzen:
Ich habe einen Code gelesen und der |=wurde im festgelegten Kontext verwendet, und erst als ich herumgespielt und herausgefunden habe, dass diese Antwort auch hier war
TallChuck
41
Dies ist nur eine ODER-Verknüpfung zwischen der aktuellen Variablen und der anderen. Sein T=Trueund F=False, sehen Sie die Ausgabe grafisch:
r s r|=s
--------------
T T T
T F T
F T T
F F F
Beispielsweise:
>>> r=True>>> r|=False>>> r
True>>> r=False>>> r|=False>>> r
False>>> r|=True>>> r
True
Dies gibt einen irgendwie verzerrten Eindruck des Bedieners; |ist ein bitweiser Operator für Ganzzahlen, nicht speziell ein boolescher Operator, und für alles andere als bools werden keine tatsächlichen Ergebnisse erzeugt Trueoder Falseausgegeben. boolist eine Unterklasse von int, und um nett zu sein, sie haben es überladen, um boolweiterhin zu produzieren True/ Falseauszugeben, aber in den meisten Fällen sollten boolesche Operationen durchgeführt werden or, nicht |. Normale Verwendungen für |sind bitweise oder oder Set-Union. Bessere Anwendungsbeispiele wären so etwas wie das, a = 0b1001; a |= 0b0010; print(bin(a))was produziert 0b1011.
ShadowRanger
9
Es führt ein binäres bitweises ODER der linken und rechten Seite der Zuweisung durch und speichert dann das Ergebnis in der linken Variablen.
Dies ist die Erklärung, nach der ich gesucht habe. Alle sprachen über Sets und Bools, aber niemand erwähnte die Verwendung mit Zahlen.
Ankush Verma
Das Beispiel, das Sie gegeben haben, ist nicht 32 |= 10sondern 32 | 10. Nur um dies für zukünftige Leser zu klären :)
sniper71
@ sniper71 was ist das Ergebnis von 32 | = 10
Future-Jim
2
So geben Sie einen Anwendungsfall an (nachdem Sie Zeit mit den anderen Antworten verbracht haben):
def process(item):return bool(item)# imagine some sort of complex processing taking place abovedef any_success(data):# return True if at least one is successful
at_least_one =Falsefor 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
Grundsätzlich anyohne Kurzschluss: Kann nützlich sein, wenn Sie jeden Artikel bearbeiten und mindestens einen Erfolg usw. aufzeichnen müssen.
In Python funktioniert | = (ior) wie eine Union-Operation. Wenn x = 5 und x | = 5 sind, werden beide Werte zuerst in Binärwerte umgewandelt, dann wird die Vereinigungsoperation ausgeführt und wir erhalten die Antwort 5.
|
Antworten:
|=
führt eine In-Place + -Operation zwischen Objektpaaren durch. Insbesondere zwischen:In den meisten Fällen hängt es mit dem
|
Bediener zusammen. Siehe Beispiele unten.Sets
Zum Beispiel die Vereinigung von zwei zugewiesenen Mengen
s1
unds2
die folgenden äquivalenten Ausdrücke:wo der Endwert von
s1
entweder äquivalent ist durch:Beispiel
Hier wenden wir OR (
|
) und das Inplace OR (|=
) auf Mengen an :Wörterbücher
In Python 3.9+ neues Merge (
|
) und Update (|=
Operatoren ) zwischen Wörterbüchern vorgeschlagen. Hinweis: Dies sind nicht die gleichen wie die oben genannten Set-Operatoren.Gegebene Operationen zwischen zwei zugewiesenen Dikten
d1
undd2
:wo
d1
ist äquivalent über:d1.update(d2)
Beispiel
Hier wenden wir merge (
|
) und update (|=
) auf Diktate an :Zähler
Das
collections.Counter
hängt mit einer mathematischen Datenstruktur zusammen, die als Multiset bezeichnet wird (mset) bezeichnet wird. Es ist im Grunde ein Diktat von (Objekt, Multiplizität) Schlüssel-Wert-Paaren.Gegebene Operationen zwischen zwei zugewiesenen Zählern
c1
undc2
:wo
c1
ist äquivalent über:Eine Vereinigung von Multisets enthält die maximalen Multiplizitäten pro Eintrag. Beachten Sie, dass sich dies nicht wie zwischen zwei Sätzen oder zwischen zwei regulären Diktaten verhält.
Beispiel
Hier wenden wir union (
|
) und die in-place union (|=
) auf Zähler an :Zahlen
Zuletzt können Sie binäre Mathematik machen.
Gegebene Operationen zwischen zwei zugewiesenen Nummern
n1
undn2
:wo
n1
ist äquivalent über:Beispiel
Hier wenden wir bitweises ODER (
|
) und das bitweise ODER (|=
) an Ort und Stelle auf Zahlen an :Rezension
In diesem Abschnitt wird kurz auf die bitweise Mathematik eingegangen. Im einfachsten Fall vergleicht die bitweise ODER-Verknüpfung zwei Binärbits. Es wird immer zurückgegeben,
1
außer wenn beide Bits sind0
.Wir erweitern diese Idee nun über Binärzahlen hinaus. Bei zwei beliebigen Integralzahlen (ohne Bruchkomponenten) wenden wir das bitweise ODER an und erhalten ein Integralergebnis:
Wie? Im Allgemeinen folgen die bitweisen Operationen einigen "Regeln":
Wenden wir diese Regeln auf unsere regulären Ganzzahlen an.
(1) Vergleichen Sie binäre Äquivalente, die hier als Zeichenfolgen betrachtet werden (
0b
bezeichnet binär):(2) Wenden Sie eine bitweise ODER-Verknüpfung auf jede Spalte an (
0
wenn beide0
, sonst1
):(3) Geben Sie das Ergebnis in dem angegebenen Typ zurück, z. B. Basis 10, dezimal:
Der interne binäre Vergleich bedeutet, dass wir letztere auf ganze Zahlen in jeder Basis anwenden können, z. B. hexadezimal und oktal:
Siehe auch
__ior__()
Methode zum Iterieren von Iterables in einerMutableSet
abstrakten Basisklasse|=
ein Set aktualisiert werden soll+ Der bitweise ODER-Operator an Ort und Stelle kann nicht auf Literale angewendet werden. Ordnen Sie Namen Objekte zu.
++ Spezielle Methoden geben dieselben Operationen wie die entsprechenden Operatoren zurück.
quelle
int
s in Python nicht veränderbar sind.In Python und vielen anderen Programmiersprachen
|
ist die bitweise ODER-Verknüpfung .|=
ist zu|
wie es+=
ist+
, dh eine Kombination aus Betrieb und Zuordnung.Also
var |= value
ist kurz fürvar = var | value
.Ein häufiger Anwendungsfall ist das Zusammenführen von zwei Sätzen:
quelle
Bei Verwendung mit Sätzen wird eine Vereinigungsoperation ausgeführt.
quelle
|=
wurde im festgelegten Kontext verwendet, und erst als ich herumgespielt und herausgefunden habe, dass diese Antwort auch hier warDies ist nur eine ODER-Verknüpfung zwischen der aktuellen Variablen und der anderen. Sein
T=True
undF=False
, sehen Sie die Ausgabe grafisch:Beispielsweise:
quelle
|
ist ein bitweiser Operator für Ganzzahlen, nicht speziell ein boolescher Operator, und für alles andere alsbool
s werden keine tatsächlichen Ergebnisse erzeugtTrue
oderFalse
ausgegeben.bool
ist eine Unterklasse vonint
, und um nett zu sein, sie haben es überladen, umbool
weiterhin zu produzierenTrue
/False
auszugeben, aber in den meisten Fällen sollten boolesche Operationen durchgeführt werdenor
, nicht|
. Normale Verwendungen für|
sind bitweise oder oder Set-Union. Bessere Anwendungsbeispiele wären so etwas wie das,a = 0b1001; a |= 0b0010; print(bin(a))
was produziert0b1011
.Es führt ein binäres bitweises ODER der linken und rechten Seite der Zuweisung durch und speichert dann das Ergebnis in der linken Variablen.
http://docs.python.org/reference/expressions.html#binary-bitwise-operations
quelle
Es ist bitweise oder. Nehmen wir an
32 |= 10
, Bild 32 und 10 sind binär.Jetzt weil | ist oder, mach ein bisschen oder auf den beiden Zahlen
dh 1 oder 0 -> 1, 0 oder 0 -> 0. Setzen Sie dies entlang der Kette fort
Ändern Sie nun die Binärzahl in eine Dezimalzahl, 10 1010 = 42.
Denken Sie für | = an die bekannten Beispiele
x +=5
. Es bedeutetx = x + 5,
also, wenn wir habenx |= 5
, bedeutet esx = x bitwiseor with 5
.quelle
32 |= 10
sondern32 | 10
. Nur um dies für zukünftige Leser zu klären :)So geben Sie einen Anwendungsfall an (nachdem Sie Zeit mit den anderen Antworten verbracht haben):
Grundsätzlich
any
ohne Kurzschluss: Kann nützlich sein, wenn Sie jeden Artikel bearbeiten und mindestens einen Erfolg usw. aufzeichnen müssen.Siehe auch die Vorbehalte in dieser Antwort
quelle
In Python funktioniert | = (ior) wie eine Union-Operation. Wenn x = 5 und x | = 5 sind, werden beide Werte zuerst in Binärwerte umgewandelt, dann wird die Vereinigungsoperation ausgeführt und wir erhalten die Antwort 5.
quelle