I'm having trouble understanding just why I would want to use bitwise operators in a high-level language like Python. From what I have learned of high- vs low-level languages is that high-level ones are typically designed to that you don't have to worry too much about the machine code going into a computer. I don't see the point of manipulating a program bit-by-bit in a language that, to my knowledge, was designed to avoid it.
3 回答
如果您想要在标准库中使用位运算符的具体示例,只需查看该re
库即可。 根据 API,标志应该按位OR
编辑在一起。
这允许您在单个参数中传递大量选项。考虑以下选项:
re.compile(expression,re.I | re.M | re.X)
对比
re.compile(expression,ignorecase=True,multiline=True,verbose=True)
我认为我们可以同意第一个版本至少要紧凑得多。
你可能会想“嗯,我更喜欢第二个——毕竟,它更明确!” ......你可能有一个案例。但是,如果你有一个同事用 C 语言生成了一个二进制文件,他告诉你文件头包含一个 32 位整数字段,并且该整数字段存储解码文件其余部分所需的标志,该怎么办?作为一个理性的人,您希望以高级语言处理文件,您可以轻松高效地操作数据,因此您选择 python。现在我敢打赌,您很高兴您可以进行按位运算,以免自己需要使用 C 来解码/分析您的文件。
Python 中的按位运算肯定是有用的。除了or
像 mgilson 提到的 -ing 标志之外,我自己也使用它们来为 CAN 消息组成数据包头。通常,较低级别消息协议的标头由长度不是 8 位倍数的字段组成,因此如果您只想更改一个字段,则需要按位运算符。
Python 作为一种高级语言并不意味着你不能用它做低级的事情!
几乎任何使用传输协议的东西最终都会在某个时候使用按位操作——一组全为真或假的标志通常会组合成一个字节,最多可容纳 8 个标志以节省带宽,并且没有 255 个字典解码它的值 - 不要笑我已经看到它在一种情况下用一种以上的语言完成,并且有非常多的 if else 语句 - 当最多只需要几个按位操作时。