Python3中将一些Python2的模块名称作了修改,须要咱们作一些处理来保证代码在不一样Python版本中可以正常运行。本文主要记录本身遇获得的一些不一样。
我如今是经过异常处理的方式解决模块名称的问题。html
try: #python3
from unittest.mock import MagicMock
except ImportError: #python3
from mock import MagicMock
Python3 | Python2 |
---|---|
input() | raw.input(),sys.readline() |
整除// | / |
Python3 | Python2 |
---|---|
unittest.mock.MagicMock | mock.MagicMock |
urllib.request.urlretrieve | urllib.urlretrieve |
queue | Queue |
functools.reduce | reduce |
通常在Python3代码引入模块代码的首行添加如下代码:python
from __future__ import print_function
from __future__ import division
在Python2中,列表推导式中的索引变量的是能够泄露到其封闭做用域中的。而Python3中则不能够。
下面举一个简单的例子说明这个问题,如咱们在一个for循环内部使用列表推导式web
for i in range(2):
a = [i for i in range(5)]
print(i)
在Python3中,上面的代码输出为svg
>>0
>>1
而在Python2中,上面的代码输出为函数
>>4
>>4
这是因为Python2中的列表推导式中的索引变量i的做用域泄露到了for循环中。
一种较好的解决方式是在列表推导式中使用与外层循环变量不一样的索引变量名。url
Python安装目录下的Scripts/2to3.exe
能够将Pyhon2代码转换为Python3。
使用命令2to3 -w file.py
能够直接在原地修改文件。其余命令能够使用2to3 --help
查看。spa
参考资料code
https://www.cnblogs.com/kungfupanda/archive/2016/06/01/5548303.htmlxml