既然已经引入了 unicode_literals模块,为什么str面前 不加b呢?
使用from __future__ import unicode_literals将把Python 3.x的unicode规则带入Python 2.7中。
参考代码:
from __future__ import unicode_literals
s = 'am I an unicode?'
print isinstance(s, unicode
使用from __future__ import unicode_literals将把Python 3.x的unicode规则带入Python 2.7中。
参考代码:
from __future__ import unicode_literals
s = 'am I an unicode?'
print isinstance(s, unicode
2017-08-24
你说的问题有两个方面,我觉得是你没弄明白u和b的区别。
一、Python 2有两种字符串类型:Unicode字符串和非Unicode字符串,Python 3只有一种类型:Unicode字符串(Unicode strings)。python2中字符串是以beytes方式存储的,pyton3中字符串是以unicode方式存储的。
引用python的模块后,s = 'am I an unicode?' 默认就是Unicode方式存储的,这对应了Python2 的s = u'am I an unicode?'
例如在python2.7中:
>>> s = 'am I an unicode?'
>>> print isinstance(s, unicode)
>>> False
>>> s = u'am I an unicode?'
>>> print isinstance(s, unicode)
>>> True
二、b是将字符串存储为字节码:
python 2.7中:
>>> s = b'am I an bytes?'
>>> s = 'am I an bytes?'
>>> isinstance(s,str)
>>> True
>>> isinstance(s,bytes)
>>> True
如上,在Python2.7中字符串是以bytes方式存储的。
python3中:
>>> s = 'am I an bytes?'
>>> type(s)
<class 'str'>
>>> isinstance(s,unicode)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'unicode' is not defined
>>>
>>> s = b'am I an bytes?'
>>> type(s)
<class 'bytes'>
>>> isinstance(s,str)
False
可以看到在python isinstance(s,unicode)报错了,isinstance中没有了unicode的判断,在python3中str是以unicode方式存储的。
举报