jfs*_*jfs 2 python pypy jython language-lawyer micropython
可能存在断言失败的Python实现:
assert all(byte in range(256) for byte in any_bytes_object) # Python 3 semantics
assert all(byte in range(256) for byte in map(ord, any_bytes_object)) # Python 2
Run Code Online (Sandbox Code Playgroud)
POSIX明确指定CHAR_BIT == 8(每字节8位).Python中有类似的保证吗?它在某处记录了吗?
如果bytes没有定义name(在旧的Python版本上),例如,在Jython 2.5上,那么问题是关于str类型(bytestrings),即bytes = str在Python 2上.
字节对象Python 3文档说
bytes对象实际上表现得像不可变的整数序列,序列中的每个值都被限制为0 <= x <256
并且bytearray类型在Python 3和Python 2中都记录为
0 <= x <256范围内的可变整数序列
因此语言是在8位字节的假设下设计的.
Python 2数据模型部分说"至少"8位似乎只是Python 2文档与Python 3文档相比没有及时更新的地方之一.它至少可以追溯到Python 1.4,早在他们不确定是否需要支持奇怪的字节大小的早期阶段.
由于至少在2.0版本中引入了unicode支持,因此文档中充满了将bytestring类型称为"8位字符串"的地方.Python没有像C这样严格指定,但我会说Python 2.0或更高版本的任何"符合"实现都必须具有8位字节.