Noto que puedo hacer cosas como 2 << 5
obtener 64 y 1000 >> 2
250.
También puedo usar >>
en print
:
print >>obj, "Hello world"
¿Que está sucediendo aquí?
python
syntax
operator-keyword
user3201152
fuente
fuente
<<
,>>
,&
,|
,~
, y^
hacer?Respuestas:
Creo que es una pregunta importante y aún no está respondida (el OP parece saber ya sobre los operadores de turno). Déjame intentar responder, el operador >> en tu ejemplo se usa para dos propósitos diferentes. En términos de C ++, este operador está sobrecargado. En el primer ejemplo se usa como operador bit a bit (desplazamiento a la izquierda), mientras que en el segundo escenario se usa simplemente como redirección de salida. es decir
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,
ejemplo
with open('foo.txt', 'w') as obj: print >> obj, "Hello world" # hello world now saved in foo.txt
actualizar:
En python 3 es posible dar el argumento del archivo directamente de la siguiente manera:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
fuente
__rshift__
y__lshift__
.Estos son operadores de desplazamiento bit a bit.
Citando de los documentos :
Retorna
x
con los bits desplazados hacia la izquierda en y lugares (y los nuevos bits en el lado derecho son ceros). Esto es lo mismo que multiplicarx
por2**y
.Devuelve
x
con los bits desplazados hacia la derecha en y lugares. Esto es lo mismo que dividirx
por2**y
.fuente
print bin(1)
,print bin(1 << 1)
,print bin(17)
,print bin(17 >> 1)
y así sucesivamente. Puedes ver cómo funciona sin explicaciones.print >>obj, "Hello world"
2 << 5
y1000 >> 2
¯_ (ツ) _ / ¯El valor binario real de 12 es "00 1100" cuando ejecutamos la instrucción anterior. Desplazamiento a la izquierda (2 lugares desplazados a la izquierda) devuelve el valor 48, su valor binario es "11 0000".
El valor binario de 48 es "11 0000", después de ejecutar la instrucción anterior Desplazamiento a la derecha (2 lugares desplazados a la derecha) devuelve el valor 12, su valor binario es "00 1100".
fuente
El otro caso que involucra
print >>obj, "Hello World"
es la sintaxis "print chevron" para laprint
declaración en Python 2 (eliminada en Python 3, reemplazada por elfile
argumento de laprint()
función ). En lugar de escribir en la salida estándar, la salida se pasa alobj.write()
método. Un ejemplo típico serían los objetos de archivo que tienen unwrite()
método. Vea la respuesta a una pregunta más reciente: Doble signo mayor que en Python .fuente
Son un operador de desplazamiento de bits que existe en muchos lenguajes de programación convencionales,
<<
es el desplazamiento a la izquierda y>>
es el desplazamiento a la derecha, se pueden demostrar en la siguiente tabla, suponga que un número entero solo ocupa 1 byte en la memoria.| 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 |
fuente
Estos son los operadores de turno
fuente
<< 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
fuente