基本用法

请考虑以下 Python2.x 代码。将文件另存为 example.py

Python 2.x >= 2.0

def greet(name):
    print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)

在上面的文件中,有几个不兼容的行。在 Python 3.x 中,raw_input() 方法已被替换为 input(),而 print 不再是一个语句,而是一个函数。可以使用 2to3 工具将此代码转换为 Python 3.x 代码。

Unix

$ 2to3 example.py

Windows

> path/to/2to3.py example.py

运行上面的代码将输出与原始源文件的差异,如下所示。

RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored example.py
--- example.py    (original)
+++ example.py    (refactored)
@@ -1,5 +1,5 @@
 def greet(name):
-    print "Hello, {0}!".format(name)
-print "What's your name?"
-name = raw_input()
+    print("Hello, {0}!".format(name))
+print("What's your name?")
+name = input()
 greet(name)
RefactoringTool: Files that need to be modified:
RefactoringTool: example.py

可以使用 -w 标志将修改写回源文件。除非给出 -n 标志,否则将创建名为 example.py.bak 的原始文件的备份。

Unix

$ 2to3 -w example.py

Windows

> path/to/2to3.py -w example.py

现在 example.py 文件已经从 Python 2.x 转换为 Python 3.x 代码。

完成后,example.py 将包含以下有效的 Python3.x 代码:

Python 3.x >= 3.0

def greet(name):
    print("Hello, {0}!".format(name))
print("What's your name?")
name = input()
greet(name)