python2x如何迁移代码到python3中
2to3 - 自动Python 2到3代码转换
2to3是一个Python程序,它读取Python 2.x源代码并应用一系列修复程序将其转换为有效的Python 3.x代码。标准库包含一组丰富的修复程序,可以处理几乎所有代码。但是,2to3支持库lib2to3是一个灵活的通用库,因此可以为2to3编写自己的修复程序。 lib2to3也可以适用于需要自动编辑Python代码的自定义应用程序。
使用2to3的
2to3通常与Python解释器一起安装为脚本。它也位于Python根目录的Tools / scripts目录中。
2to3的基本参数是要转换的文件或目录的列表。这些目录将以递归方式遍历Python源代码。
以下是Python 2.x源文件示例example.py:
def greet (name ):
打印 “你好,{0}!” 。格式(名称)
打印 “你叫什么名字?”
name = raw_input ()
greet (name )
它可以通过命令行上的2to3转换为Python 3.x代码:
$ 2to3 example.py
打印对原始源文件的差异。2to3还可以将所需的修改写回源文件。(当然,除非也给出了-n,否则也会对原始文件进行备份。)使用-w标志启用后面的更改:
$ 2to3 -w example.py
转换后,example.py看起来像这样:
def greet (name ):
print (“Hello,{0}!” 。format (name ))
print (“你叫什么名字?” )
name = input ()
greet (name )
在整个翻译过程中保留评论和精确缩进。
默认情况下,2to3运行一组预定义的修复程序。该-l标志列出所有可用的固定器。可以使用-f给出一组明确的运行 修复程序。同样,-x显式禁用修复程序。以下示例仅运行imports和has_key修复程序:
$ 2to3 -f进口-f has_key example.py
此命令运行除应用修复程序之外的每个修复程序:
$ 2to3 -x应用example.py
某些修复程序是显式的,这意味着它们不是默认运行的,必须在命令行中列出才能运行。在这里,除了默认修复程序之外,还运行了成语修复程序:
$ 2to3 -f all -f idioms example.py
请注意如何通过all来启用所有默认修复程序。
有时2to3会在源代码中找到需要更改的位置,但2to3无法自动修复。在这种情况下,2to3将在文件的差异下打印警告。您应该解决警告以获得兼容的3.x代码。
2to3也可以重构doctests。要启用此模式,请使用-d 标志。请注意,只有 doctests才会被重构。这也不要求模块是有效的Python。例如,rest文档中的doctest示例也可以使用此选项进行重构。
该-v选项可以对翻译过程的详细信息输出。
当-p通过时,2to3将print视为函数而不是语句。从 __future__ import print_function使用时,这很有用。如果未给出此选项,则打印修复程序将在一组额外的括号中包围打印调用,因为它无法区分带括号的print语句(例如print (“a” + “b” + “c”))和a真正的函数调用。
lib2to3 - 2to3的库
警告
该lib2to3 API应被视为不稳定,可能会在未来发生急剧变化。
python2x如何迁移代码到python3中的更多相关文章
- Python3中的新特性(3)——代码迁移与2to3
1.将代码移植到Python2.6 建议任何要将代码移植到Python3的用户首先将代码移植到Python2.6.Python2.6不仅与Python2.5向后兼容,而且支持Python3中的部分新特 ...
- Python中生成器和迭代器的区别(代码在Python3.5下测试):
https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...
- (转)详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
原文:https://www.jb51.net/article/138363.htm hasattr()函数 hasattr()函数用于判断是否包含对应的属性 语法: hasattr(object,n ...
- Python3中使用PyMySQL连接Mysql
Python3中使用PyMySQL连接Mysql 在Python2中连接Mysql数据库用的是MySQLdb,在Python3中连接Mysql数据库用的是PyMySQL,因为MySQLdb不支持Pyt ...
- python3 中mlpy模块安装 出现 failed with error code 1的决绝办法(其他模块也可用本方法)
在python3 中安装其它模块时经常出现 failed with error code 1等状况,使的安装无法进行.而解决这个问题又非常麻烦. 接下来以mlpy为例,介绍一种解决此类安装问题的办法. ...
- python3中返回字典的键
我在看<父与子的编程之旅>的时候,有段代码是随机画100个矩形,矩形的大小,线条的粗细,颜色都是随机的,代码如下, import pygame,sys,random from pygame ...
- Python3中的新特性(1)——新的语言特性
1.源代码编码和标识符 Python3假定源代码使用UTF-8编码.另外,关于标识符中哪些字符是合法的规则也放宽了.特别是,标识符可以包含代码点为U+0080及以上的任意有效Unico ...
- python3中的编码与解码(超好理解)
编码和解码是针对数据而言的,数据能干什么呢?无非就是用来显示,储存和传输的: 储存和传输数据当然是希望数据越小越好,所以发明了utf-8这种数据编码显示:它智能将英文用一个字节表示,欧洲的字符用两个字 ...
- Python2和Python3中的字符串编码问题解决
Python2和Python3在字符串编码上是有明显的区别. 在Python2中,字符串无法完全地支持国际字符集和Unicode编码.为了解决这种限制,Python2对Unicode数据使用了单独的字 ...
随机推荐
- c++11の关联容器
一.关联容器 C++的容器类型可以分为顺序容器和关联容器两大类.对于关联容器,主要有map和set,对于这两种,根据不同的维度,衍生出了8种容器 map ...
- KL散度、JS散度、Wasserstein距离
1. KL散度 KL散度又称为相对熵,信息散度,信息增益.KL散度是是两个概率分布 $P$ 和 $Q$ 之间差别的非对称性的度量. KL散度是用来 度量使用基于 $Q$ 的编码来编码来自 $P$ 的 ...
- 好程序员告诉你HTML好在哪里,为什么值得我们学习
好程序员告诉你HTML好在哪里,为什么值得我们学习,HTML5对于用户来说,提高了用户体验,加强了视觉感受.HTML5技术在移动端,能够让应用程序回归到网页,并对网页的功能进行扩展,用户不需要下载客户 ...
- C#中的out 参数,ref参数,值参数
大家可能在编码中或多或少的使用过out的ref,但是是否注意过他两的详细用法以及区别? 本文想介绍下详细介绍下out参数,ref参数以及一般值参数. 值参数 在使用参数时,把一个值传递给函数使用的一个 ...
- python在linux中用setproctitle自定义进程名
在linux中,如果想用python自定义进程名,需要用到第三方库setproctitle. #coding:utf8 import setproctitle setproctitle.setproc ...
- MySQL操作(备份很重要)
文档一: --修改用户密码的命令 mysqladmin -uroot -proot123 password mysql123 --登录mysql数据库的命令 mysql -uroot -proot12 ...
- MySQL之日期时间类型
mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 D ...
- centos下安装Vmware-tools时出现的问题
今天装了centos,想共享一个文件,需要安装Vmware-tools. 正常的步骤: 安装Vmware-tools 1.挂载VMwareTools光驱.虚拟机选项栏中选[虚拟机]-->[安装v ...
- [Java]list集合为空或为null的区别
判断的是list这个集合的问题,当前需要判断list内值的问题. 简述判断一个list集合是否为空,我们的惯性思维是判断list是否等于null即可,但是在Java中,list集合为空还是为null, ...
- bugku crypto 告诉你一个秘密(ISCCCTF)
emmmm....有点坑 题目: 636A56355279427363446C4A49454A7154534230526D6843 56445A31614342354E326C4B4946467A57 ...