Python中>>和<<是什么意思?
我注意到我可以做一些操作,比如 2 << 5
结果是 64,还有 1000 >> 2
结果是 250。
另外,我还可以在 print
里使用 >>
:
print >>obj, "Hello world"
这到底是怎么回事呢?
10 个回答
另一个涉及到 print >>obj, "Hello World"
的情况是 Python 2 中的“打印尖头”语法(在 Python 3 中被移除了,取而代之的是 print()
函数的 file
参数)。这里不是把内容直接输出到屏幕上,而是把输出传递给 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 |
12 << 2
48
数字12的二进制表示是“00 1100”。当我们执行左移操作(向左移动2位)时,结果变成了48,它的二进制表示是“11 0000”。
48 >> 2
12
数字48的二进制表示是“11 0000”。执行右移操作(向右移动2位)后,结果变成了12,它的二进制表示是“00 1100”。
这些是位移运算符。
引用自文档:
x << y
这个操作会把数字 x
的二进制位向左移动 y
位(右边新出现的位都是零)。这就相当于把 x
乘以 2**y
。
x >> y
这个操作会把数字 x
的二进制位向右移动 y
位。这就相当于把 x
除以 2**y
。
在你的例子中,>>
这个符号有两种不同的用法。在C++中,这个符号是被重载的。第一次用的时候,它是作为位运算符使用的(也就是右移),
2 << 5 # shift left by 5 bits
# 0b10 -> 0b1000000
1000 >> 2 # shift right by 2 bits
# 0b1111101000 -> 0b11111010
而在第二种情况下,它是用来进行输出重定向的。你可以和文件对象一起使用,像这个例子:
with open('foo.txt', 'w') as f:
print >>f, 'Hello world' # "Hello world" now saved in foo.txt
这种第二种用法的>>
只在Python 2中有效。在Python 3中,你可以通过file=
这个参数来重定向print()
的输出:
with open('foo.txt', 'w') as f:
print('Hello world', file=f) # "Hello world" now saved in foo.txt