Я замечаю, что могу 2 << 5
получить 64 и 1000 >> 2
250.
Также могу использовать >>
в print
:
print >>obj, "Hello world"
Что здесь происходит?
python
syntax
operator-keyword
user3201152
источник
источник
<<
,>>
,&
,|
,~
, и^
делать?Ответы:
Я думаю, что это важный вопрос, и на него еще нет ответа (OP, похоже, уже знает об операторах сдвига). Позвольте мне попытаться ответить, оператор >> в вашем примере используется для двух разных целей. В терминах C ++ этот оператор перегружен. В первом примере он используется как побитовый оператор (сдвиг влево), а во втором сценарии он используется просто как перенаправление вывода. т.е.
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,
пример
with open('foo.txt', 'w') as obj: print >> obj, "Hello world" # hello world now saved in foo.txt
Обновить:
В python 3 можно напрямую указать аргумент файла следующим образом:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
источник
__rshift__
и__lshift__
методы.Это операторы побитового сдвига.
Цитата из документов :
Возвраты
x
со сдвигом битов влево на y разрядов (а новые биты справа равны нулю). Это то же самое, что и умножениеx
на2**y
.Возвращает
x
со смещением битов вправо на y разрядов. Это то же самое, что и делениеx
на2**y
.источник
print bin(1)
,print bin(1 << 1)
,print bin(17)
,print bin(17 >> 1)
и так далее. Вы можете увидеть, как это работает, без пояснений.print >>obj, "Hello world"
2 << 5
и1000 >> 2
¯_ (ツ) _ / ¯Фактическое двоичное значение 12 равно «00 1100», когда мы выполняем вышеуказанный оператор. Сдвиг влево (сдвиг влево на 2 позиции) возвращает значение 48, его двоичное значение равно «11 0000».
Двоичное значение 48 равно «11 0000», после выполнения вышеуказанного оператора «Сдвиг вправо» (сдвиг вправо на 2 разряда) возвращает значение 12, его двоичное значение равно «00 1100».
источник
Другой случай
print >>obj, "Hello World"
- это синтаксис «print chevron» дляprint
оператора в Python 2 (удален в Python 3, замененfile
аргументомprint()
функции ). Вместо записи в стандартный вывод вывод передается вobj.write()
метод. Типичным примером могут быть файловые объекты, имеющиеwrite()
метод. См. Ответ на более свежий вопрос: двойной знак «больше» в Python .источник
Это оператор битового сдвига, который существует во многих основных языках программирования,
<<
это левый сдвиг и>>
правый сдвиг, их можно продемонстрировать в следующей таблице, предполагая, что целое число занимает только 1 байт в памяти.| 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 |
источник
Это операторы сдвига
источник
<< 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
источник