发布时间:2019/07/03 15:05:57   更新时间:2020/07/31 19:51:12
python3和python2是有很多细节差异的!
这里进行个长期积累。——这篇文章,后续会不断补充。
* long类型,python2有,python3没有了。
* python3的keys()返回dict_keys,还要用list才能称为list。
* items()和iteritems()区别:
字典的items方法作用:是将字典中的所有项,以列表方式返回。
字典的iteritems方法作用:与items大致相同,只是它的返回值不是列表,而是一个迭代器。
在Python2.x中,iteritems() 用于返回本身字典列表操作后的迭代器,不占用额外的内存。
在Python 3.x 里面,iteritems()方法已经废除了。在3.x里用 items()替换iteritems() ,可以用于 for 来循环遍历。
* 对于一些字符,python2和python3的md5加密出来是不一样的.
# python2.7
pwd = "xxx" + chr(163) + "fj"
checkcode = hashlib.md5(pwd).hexdigest()
print checkcode # ea25a328180680aab82b2ef8c456b4ce
# python3.6
pwd = "xxx" + chr(163) + "fj"
checkcode = hashlib.md5(pwd.encode("utf-8")).hexdigest()
print(checkcode) # b517e074034d1913b706829a1b9d1b67
按代码差异来将,就是在python3中需要对字符串进行 encode 操作,如果没有则会报错
checkcode = hashlib.md5(pwd).hexdigest()
TypeError: Unicode-objects must be encoded before hashing
这是因为加密时需要将字符串转化为 bytes 类型,3默认编码是 utf-8 .所以我用utf-8进行解码.
* http标准库中,HTTPSConnection和HTTPConnection的参数的个数有变化,需要参考新的代码
一般在/usr/lib/python3.x/http
* python3的urllib结构变了,
原来的 urllib.urlencode
要写成 urllib.parse.urlencode
* Python3 字典 has_key() 被移除使用 in代替
* 字符串类型:
python2和python3中,一共有str、bytes、unicode、basestring。
其中basestring是一个基类。行为类似bytes,只是是可变的。
python2中,str和bytes一样,unicode要加’u’。
python3中,str和unicode一样(不需要加’u’了)。
python2中,从str对象获取的是字节序列(utf8编码),从unicode对象获取的是unicode字符。
python3中,从str对象获取的是unicode字符。
* 关于django __str__ 与 __unicode__ 问题同上类似
* 关于map、zip等函数:
python2返回的直接是list。
python3返回的是迭代器。
python3中,list(map(xxx))是list。