python2向python3的迁移

一些我们这样的初学者面对的问题就是,拿到大佬们以前的python2的代码,想把它转换到3运行学习。

最常见的问题就是将print xxx 改为print(xxx).

1) 谈一下python2和python3的故事

有的说这是两名完全不同的语言= =,鄙人没真正用过py2,看到的二者区别都是细枝末节的语法。可能最初py3刚出来时与之差别很大,还互不兼容,用的人少,所以会出来许多讨论,比如要不要学py3,应该学哪个的问题。

如今可以看到经过几年的发展,py3已经时大势所趋了,但是会py2的你学的也是python语言,掌握了这门语言的精髓和思想,语言有所更新只要与时俱进即可,认识一下改变之处,学习一些新的特性,想必不是难事。目前,基本所有工具库的开发都是基于py3了,py2的逐渐不再更新。据说要在2020年前实现2到3的迁移,同时全面建成小康社会。

在用py2的不妨逐渐了解一下3的语法和特性,试着写3,本来学的就是3的我们也一定没有完全了解3的特性和牛逼,看到了这么个文档推荐一下,10 awesome features of Python that you can't use because you refuse to upgrade to Python 3  。

2)优雅的转变到3

常见的不同之处就是 input,print,range及一些运算符吧,代码太长手动改很麻烦何况我们有可能不知道有哪些要改的,介绍一个python自带的工具 2to3 ,它就在scripts目录下。使用方法不妨参考官方文档。使用方法其实就这一行执行即可:

$ 2to3 example.py

当然,在win系统使用命令很麻烦。打开命令行,首先找到所在目录,我的是在  C:\ProgramData\Anaconda3\Scripts ,进入这个目录;然后找到你要转换的文件目录,此处可以是单个文件也可以是一个目录 ,执行后会详细列出修改的地方如下图。

C:\WINDOWS\system32> cd C:\ProgramData\Anaconda3\Scripts
C:\ProgramData\Anaconda3\Scripts>  .\2to3.exe -w  E:\xxx\xxx.py

python2向python3的迁移_第1张图片

没有-w命令好像就只是列出修改内容而不修改,加上-w后执行修改而且会多出一个.bak文件保留原来的版本。

此外,2to3还有许多其他的命令选项,对于文档后面列出的规则(fixers),-f选项钦定了只使用某几个规则进行转换其余忽略,  -x 选项与之相反,排除某个规则不做转换。规则的名字需按文档列出的写,如:

$ 2to3 -f imports -f has_key example.py

另外文档指出有些规则需要显式的(explicit指定才可执行。

最后,有几个更有用的选项,-o 或 --output-dir 指定输出文件目录,-W 或 --write-unchanged-files顾名思义,没有可改的也要输出,-v可以输出更多信息,--add-suffix 可以在输出文件名末尾加后缀,-n 没看懂= =。

$ 2to3 --output-dir=python3-version/mycode -W -n python2-version/mycode

这个例子是将指定文件目录下的文档全部转换后输出到另一个文件下,-W就很有必要了,可以附加-f 等其他选项完成我们大多数2to3的要求了。当然这一工具也有办不成的事,有的会提示你手动修改,有时需要我们自己写一些规则再转换了。

最后,顺应趋势2to3,大家一起加油学习吧~

你可能感兴趣的:(python学习)