Ich merke, dass ich Dinge tun kann 2 << 5
, um 64 und 1000 >> 2
250 zu bekommen.
Auch kann ich verwenden >>
in print
:
print >>obj, "Hello world"
Was passiert hier?
python
syntax
operator-keyword
user3201152
quelle
quelle
<<
,>>
,&
,|
,~
, und^
tun?Antworten:
Ich denke, es ist eine wichtige Frage, die noch nicht beantwortet wurde (das OP scheint bereits über Schichtbetreiber Bescheid zu wissen). Lassen Sie mich versuchen zu antworten, der Operator >> in Ihrem Beispiel wird für zwei verschiedene Zwecke verwendet. In C ++ ist dieser Operator überladen. Im ersten Beispiel wird es als bitweiser Operator (Linksverschiebung) verwendet, während es im zweiten Szenario lediglich als Ausgabeumleitung verwendet wird. dh
2 << 5 # shift to left by 5 bits 2 >> 5 # shift to right by 5 bits print >> obj, "Hello world" # redirect the output to obj,
Beispiel
with open('foo.txt', 'w') as obj: print >> obj, "Hello world" # hello world now saved in foo.txt
aktualisieren:
In Python 3 ist es möglich, das Dateiargument direkt wie folgt anzugeben:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
quelle
__rshift__
und tatsächlich überschreiben__lshift__
.Dies sind bitweise Verschiebungsoperatoren.
Zitat aus den Dokumenten :
Gibt zurück,
x
wobei die Bits um y Stellen nach links verschoben sind (und neue Bits auf der rechten Seite sind Nullen). Dies entspricht dem Multiplizierenx
mit2**y
.Gibt zurück,
x
wobei die Bits um y Stellen nach rechts verschoben sind. Dies ist die gleiche wie Dividierenx
durch2**y
.quelle
print bin(1)
,print bin(1 << 1)
,print bin(17)
,print bin(17 >> 1)
und so weiter. Sie können sehen, wie es ohne Erklärungen funktioniert.print >>obj, "Hello world"
2 << 5
und1000 >> 2
¯_ (ツ) _ / ¯Der tatsächliche Binärwert von 12 ist "00 1100", wenn wir die obige Anweisung ausführen. Die Linksverschiebung (2 Stellen nach links verschoben) gibt den Wert 48 zurück. Der Binärwert ist "11 0000".
Der Binärwert von 48 ist "11 0000", nachdem die obige Anweisung ausgeführt wurde. Die Rechtsverschiebung (2 Stellen nach rechts verschoben) gibt den Wert 12 zurück. Der Binärwert ist "00 1100".
quelle
Der andere Fall
print >>obj, "Hello World"
ist die "print chevron" -Syntax für dieprint
Anweisung in Python 2 (in Python 3 entfernt, ersetzt durch dasfile
Argument derprint()
Funktion ). Anstatt in die Standardausgabe zu schreiben, wird die Ausgabe an dieobj.write()
Methode übergeben. Ein typisches Beispiel wären Dateiobjekte mit einerwrite()
Methode. Siehe die Antwort auf eine neuere Frage: Doppelt größer als in Python anmelden .quelle
Sie sind Bitverschiebungsoperatoren, die in vielen gängigen Programmiersprachen existieren,
<<
die Linksverschiebung und>>
die Rechtsverschiebung sind. Sie können wie in der folgenden Tabelle gezeigt werden. Nehmen Sie an, dass eine Ganzzahl nur 1 Byte im Speicher benötigt.| operate | bit value | octal value | description | | ------- | --------- | ----------- | -------------------------------------------------------- | | | 00000100 | 4 | | | 4 << 2 | 00010000 | 16 | move all bits to left 2 bits, filled with 0 at the right | | 16 >> 2 | 00000100 | 4 | move all bits to right 2 bits, filled with 0 at the left |
quelle
Dies sind die Schichtoperatoren
quelle
<< Mean any given number will be multiply by 2the power for exp:- 2<<2=2*2'1=4 6<<2'4=6*2*2*2*2*2=64
quelle