Python中>>和<<是什么意思?

254 投票
10 回答
408660 浏览
提问于 2025-04-18 01:08

我注意到我可以做一些操作,比如 2 << 5 结果是 64,还有 1000 >> 2 结果是 250。

另外,我还可以在 print 里使用 >>

print >>obj, "Hello world"

这到底是怎么回事呢?

10 个回答

15

另一个涉及到 print >>obj, "Hello World" 的情况是 Python 2 中的“打印尖头”语法(在 Python 3 中被移除了,取而代之的是 print() 函数的 file 参数)。这里不是把内容直接输出到屏幕上,而是把输出传递给 obj.write() 方法。一个典型的例子就是文件对象,它们有一个 write() 方法。想了解更多,可以查看一个更近期的问题:Python 中的双大于号

39

它们是位移运算符,很多主流编程语言都有。<< 是左移运算符,>> 是右移运算符。可以通过下面的表格来理解,假设一个整数在内存中只占用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 |
65

12 << 2

48

数字12的二进制表示是“00 1100”。当我们执行左移操作(向左移动2位)时,结果变成了48,它的二进制表示是“11 0000”。

48 >> 2

12

数字48的二进制表示是“11 0000”。执行右移操作(向右移动2位)后,结果变成了12,它的二进制表示是“00 1100”。

119

这些是位移运算符。

引用自文档

x << y

这个操作会把数字 x 的二进制位向左移动 y 位(右边新出现的位都是零)。这就相当于把 x 乘以 2**y

x >> y

这个操作会把数字 x 的二进制位向右移动 y 位。这就相当于把 x 除以 2**y

160

在你的例子中,>>这个符号有两种不同的用法。在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

撰写回答