python 2 与 python 3 变化

基本语法变化

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 namePython 3 name
__builtin__builtins
ConfigParserconfigparser
copy_regcopyreg
cPicklepickle
cStringIO.StringIO()io.StringIO
itertools.ifilter()filter()
cookielibhttp.cookiejar
Cookiehttp.cookies
htmlentitydefshtml.entities
HTMLParserhtml.parser
httplibhttp.client
BaseHTTPServerhttp.server
CGIHTTPServerhttp.server
SimpleHTTPServerhttp.server
itertools.imapmap
Queuequeue
reduce()functools.reduce()
reload()imp.reload()
reprreprlib
SocketServersocketserver
Tkintertkinter
Dialogtkinter.dialog
FileDialogtkinter.FileDialog
ScrolledTexttkinter.scolledtext
SimpleDialogtkinter.simpledialog
Tixtkinter.tix
Tkconstantstkinter.constants
Tkdndtkinter.dnd
tkColorChoosertkinter.colorchooser
tkCommonDialogtkinter.commondialog
tkFileDialogtkinter.filedialog
tkFonttkinter.font
tkMessageBoxtkinter.messagebox
tkSimpleDialogtkinter.simpledialog
robotparserurllib.robotparser
_winregwinreg
xrange()range()
itertools.izip()zip()

转自githubiflin.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值