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数据使用了单独的字 ...
随机推荐
- time-时间模块
# time模块import time# 时间戳res = time.time() # ***print(res, type(res)) # time.sleep(1) # ***# print(12 ...
- 017_python常用小技巧
一.进行十六进制运算 print(hex(int("6500000001", 16) - int("640064c6e7",16))) 0xff9b391a
- 【原创】小说:我是一条DQL
SQL执行流程图如下 本文改编自<高性能Mysql>,烟哥用小说的形式来讲这个内容. 序章 自我介绍 我是一条sql,就是一条长长的字符串,不要问我长什么样,因为我比较傲娇. 额~~不是我 ...
- 在Winform开发框架中下拉列表绑定字典以及使用缓存提高界面显示速度
在我们开发Winform界面的时候,往往需要绑定数据字典操作,也就是绑定一些下拉列表或者一些列表显示等,以便我们方便选择数据操作,常见的字典绑定操作就是对下拉列表的处理,本篇随笔是基于DevExpre ...
- Elastic Stack-Elasticsearch使用介绍(二)
一.前言 写博客,更要努力写博客! 二.Mapping介绍 Mapping类似于数据库中的表结构的定义:这里我们试想一下表结构定义需要那些: 1.字段和字段类型,在Elasticsearch中 ...
- url 的正则表达式:path-to-regexp
概述 该工具库用来处理 url 中地址与参数,能够很方便得到我们想要的数据. js 中有 RegExp 方法做正则表达式校验,而 path-to-regexp 可以看成是 url 字符串的正则表达式. ...
- java接口测试入门
一.什么是接口 接口是前端和后端的数据通道 二.如何获取接口 1.开发不提供接口文档,通过抓包工具比如fiddler进行抓取,如下: 步骤一:设置浏览器(比如火狐)代理 步骤二:设置url过滤器,进入 ...
- linux环境下vim创建java文件,并编译运行
一.前提 安装Java 二.创建工作目录并编辑java文件 三.编译 四.运行
- C#给字符串赋予字面值——字符串插入、转义序列的使用
1.占位符.字符串插入 给字符串赋予字面值时,经常遇见在字符串中包含变量的情况,用连接符进行拼接.转换的方式比较麻烦.还容易出错.C#提供了较为便捷的处理方式,即‘占位符’,以及C#6的新功能‘插入字 ...
- React Native & Android & iOS & APK
React Native & Android & iOS & APK https://play.google.com/apps/publish/signup/ $ 25 bui ...