3 比 2 要慢不少, 囧rz.
int
和 long
统一为 int
, 表现为 long
真正的除法 1/2 => 0.5
, 原语法退化为 1//2
可用 nonlocal
声明非局部变量, 介于 global
和 local
之间
去除元组参数解包, 不能再定义 def foo( (a, (b, c)) ):
了
八进制语法变化: 0755 => 0o755
比较不同时只支持!=
, 不再支持<>
比较时若类型不匹配, 抛出 TypeError
, 而不是返回 False
raw_input()
更改为 input()
, 原input()
应用eval(input())
print
变成函数 print()
了
exec
变成函数 exec()
了
execfile()
取消, 需用 exec()
和 compile()
apply()
取消, 需用 *
和 **
展开参数
callable()
取消, 应用 hasattr(func, '__call__')
`x`
取消, 需用 repr(x)
, 避免反引号的嵌套
捕获异常语法的变化:
except ImportError, e
=> except ImportError as e
except (RuntimeError, ImportError), e
=> except (RuntimeError,ImportError) as e
抛出自定义异常语法变化:
raise MyException, 'msg'
=> raise MyException('msg')
元祖的列表解析:
[i for i in 1, 2]
=> [i for i in (1, 2)]
set 可以用大括号来标记了, 但 {} 表示空字典:
set([1, 2, 3])
=> {1, 2, 3}
set 的展开式:
set([i for i in a_sequence])
=> {i for i in a_sequence}
取消file
类, 只能用 open
打开文件, 添加打开文件的 t
和 b
模式, 添加自动关闭文件的 with open(...) as f:
语法
字符串统一为 unicode 的str
,而 bytes
只能存储 0 到 127 的不可修改的整数序列或纯粹的 ASCII 字符, bytes
到 str
要 decode()
, 反之 encode()
取消 unicode()
, 用 str()
即可
使用format()
或字符串的同名函数替代 %
格式化
ord(), chr()
可用于 unicode 的 str
了
几乎所有返回列表的方法都返回迭代器(或者动态视图)了
字典没有has_key()
了, 只能用in
运算符, 字典中返回列表的方法现在返回动态视图, 可用作迭代器, 可进行 in
测试
迭代器的函数next()
变为__next__()
, 增加了全局函数next()
range()
的行为现在是xrange()
zip(), map(), filter()
不再返回列表而是迭代器, itertools
中 izip(), imap(), ifilter()
取消
reduce()
转入 functools
模块里了
引入当前目录下的包必须指定相对路径:
from . import mypkg
from .mypkg import subpkg
from .. import fatherpkg
( 扩展的可迭代解包, 新的metaclass
语法, class decorator
, 增加抽象基类支持 )
httplib, Cookie, cookielib, BaseHTTPServer, SimpleHTTPServer, CGIHttpServer
合并为 http
urllib 和 urllib2
合并为 urllib
cStringIO, StringIO
可直接引入 io
, 优先检测c实现
cPickle, pickle
可直接引入 pickle
, 优先检测c实现
模块更名列表 from six
:
Python 2 name | Python 3 name |
---|---|
_builtin_ | builtins |
ConfigParser | configparser |
copy_reg | copyreg |
cPickle | pickle |
cStringIO.StringIO() | io.StringIO |
itertools.ifilter() | filter() |
cookielib | http.cookiejar |
Cookie | http.cookies |
htmlentitydefs | html.entities |
HTMLParser | html.parser |
httplib | http.client |
BaseHTTPServer | http.server |
CGIHTTPServer | http.server |
SimpleHTTPServer | http.server |
itertools.imap | map |
Queue | queue |
reduce() | functools.reduce() |
reload() | imp.reload() |
repr | reprlib |
SocketServer | socketserver |
Tkinter | tkinter |
Dialog | tkinter.dialog |
FileDialog | tkinter.FileDialog |
ScrolledText | tkinter.scolledtext |
SimpleDialog | tkinter.simpledialog |
Tix | tkinter.tix |
Tkconstants | tkinter.constants |
Tkdnd | tkinter.dnd |
tkColorChooser | tkinter.colorchooser |
tkCommonDialog | tkinter.commondialog |
tkFileDialog | tkinter.filedialog |
tkFont | tkinter.font |
tkMessageBox | tkinter.messagebox |
tkSimpleDialog | tkinter.simpledialog |
robotparser | urllib.robotparser |
_winreg | winreg |
xrange() | range() |
itertools.izip() | zip() |
每次把代码从python2改成python3,都有一种蛋碎的感觉,谢谢分享