簡體   English   中英

為什么是type(bytes())<'str'>

[英]Why is type(bytes()) <'str'>

我對python很新,我很欣賞它是一種動態語言。 在我的第一個python代碼大約30分鍾后,我發現bytes類型的行為有點奇怪(至少可以說):

a = bytes()
print type(a)
// prints: <type 'str'>

在這里試試: http//ideone.com/NqbcHk

現在, 文檔stringsbytes表現非常相似,但.format.encode除外,但我沒想到它們是同一類型。 我想要確保的是我在代碼中使用實際字節,並且不會發生強制/編碼/解碼。

那么這里發生了什么?

bytes類型是Python 3.x中的新增類型。 在Python 2.x中,作為兼容性填充程序, bytesstr的簡單別名。

在這里閱讀更多相關信息: 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中, bytesstr的別名,添加它是為了更容易編寫向前兼容的代碼(Python 2的str是一個字節字符串,而Python 3 str是Python 2中的unicode )。

有關更多詳細信息,請參閱Python 3.0中的新增功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM