我对python很新,我很欣赏它是一种动态语言.在我的第一个python代码大约30分钟后,我发现该bytes类型的行为有点奇怪(至少可以说):
a = bytes()
print type(a)
// prints: <type 'str'>
Run Code Online (Sandbox Code Playgroud)
在这里试试:http: //ideone.com/NqbcHk
现在,除了和外,文档说strings和bytes行为非常相似,但我没想到它们是同一类型.我想要确保的是我在代码中使用实际字节,并且不会发生强制/编码/解码..format.encode
那么这里发生了什么?
Dav*_*nan 11
该bytes类型是Python 3.x中的新类型.在Python 2.x中,作为兼容性垫片,bytes是一个简单的别名str.
在这里阅读更多相关信息:https://docs.python.org/2/whatsnew/2.6.html#pep-3112-byte-literals
Python 3.0采用Unicode作为语言的基本字符串类型,并且以不同的方式表示8位字面值,
b'string'或者使用字节构造函数.为了将来的兼容性,Python 2.6添加了字节作为str类型的同义词,它也支持b''表示法.2.6 str以各种方式与3.0的字节类型不同; 最值得注意的是,构造函数完全不同.在3.0中,
bytes([65, 66, 67])长度为3个元素,包含表示ABC的字节; 在2.6中,bytes([65, 66, 67])返回表示str()列表的12字节字符串.2.6中字节的主要用途是编写对象类型的测试,例如
isinstance(x, bytes).这将有助于2to3转换器,它无法判断2.x代码是否意图字符串包含字符或8位字节; 你现在可以使用bytes或str来准确地表示你的意图,结果代码在Python 3.0中也是正确的.
您正在查看Python 3文档.在Python 2中,bytes是一个别名str,为了使编写前向兼容代码更容易(Python 2 str是一个字节字符串,而在Python 3中str是unicodePython 2 中调用的).
有关更多详细信息,请参阅Python 3.0中的新增功能.