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