csc*_*hol 11 python unicode python-3.x
Guido van Rossum关于Python 3000的演讲最后提到了从Python 2到Python 3过渡的几个方面.他特别谈到文本处理,因为转向Unicode是因为Python 3中字符串的唯一表示是主要变化之一.
就文本处理而言,一张幻灯片(#14)说:
我使用的是Python 2.6.4.这究竟对我意味着什么?
在Python的世界中,数据和文本之间有什么区别?
mjv*_*mjv 18
简而言之,在Py3k中处理文本和数据的方式可能是语言中最"突破"的变化.通过在可能的情况下了解并避免某些Python 2.6逻辑与3.x中的工作方式不同的情况,我们可以在发生迁移时促进迁移.然而,我们应该期望2.6逻辑的某些部分可能需要特别注意和修改,例如处理不同的编码等.
BDFL对幻灯片14的建议背后的想法可能是开始" 使用 "Py3k支持的相同类型(并且只有这些),即字符串(str类型)的unicode字符串和"data"(bytes类型)的8位字节序列.
由于这些类型的语义和相关存储/编码在2.6和3.x版本之间不同,因此前一句中的术语" 使用 "被相当宽松地使用.在Python 2.6中,字节类型和相关的文字语法(b'xyz')只是映射到str类型.因此
# in Py2.6
>>'mykey' == b'mykey'
True
b'mykey'.__class__
<class 'str'>
# in Py3k
>>>'mykey' == b'mykey'
False
b'mykey'.__class__
<class 'bytes'>
Run Code Online (Sandbox Code Playgroud)
要回答你的问题[在下面的评论中],在2.6中你是否使用b'xyz'或'xyz',Python将其理解为相同而且一件事:str. 重要的是你将这些理解为[潜在/未来]两种截然不同的类型,具有不同的目的:
例如,再说一下您的示例/问题,在Py3k中,您将能够拥有一个包含两个具有相似键的元素的字典,一个使用b'mykey',另一个使用'mykey',但是在2.6以下是不可能的,因为这两个键真的是一样的; 重要的是你知道这种事情并避免(或在代码中以特殊的方式明确标记)2.6代码在3.x中不起作用的情况.
在Py3k中,str是一个抽象的unicode字符串,一系列unicode代码点(字符)和Python处理将其转换为编码形式或从其编码形式转换(无论编码可能是什么程序员(作为程序员,你对编码有说法但是在你处理字符串操作的时候,你不必担心这些细节).相反,字节是8位"事物"的序列,其语义和编码完全留给程序员.
因此,即使Python 2.6没有看到差异,通过显式使用bytes()/ b'...'或str()/ u'...',你......
有关更多信息:
Python 2.6新增功能(请参阅PEP 3112字节文字)
Python 3.0新功能(请参阅Text Vs. Data Instead Of Unicode Vs. 8-bit顶部附近)
| 归档时间: |
|
| 查看次数: |
2519 次 |
| 最近记录: |