以下为个人学习笔记整理
# python2 对比 python3 差异
# print is a Function
 print 不再是一个关键字,而是作为一个函数被使用。
Old: print "The answer is", 2*2  | |
New: print("The answer is", 2*2)  | 
# Views And Iterators Instead Of Lists
 部分函数的返回不再是 「list」 而是 「view」 或者 「iterators」
Old: list = dict.keys()  | |
New: iterator = dict.keys()  | 
 不再支持部分接口
.iterkeys()  | |
.iteritems()  | |
.itervalues()  | 
 部分函数的返回值修改为 iterator
zip()  | |
map()  | |
filter()  | 
 range 功能和 xrange 保持一致,xrange 不再被使用。
##Ordering Comparisons
 不同类型的对象之间进行比较会抛出 TypeError 异常
Old: 1 < ""  | |
True | |
New: 1 < ""  | |
TypeError: '<' not supported between instances of 'int' and 'str'  | 
 部分函数被废弃
cmp()  | |
__cmp__()  | 
 builtin.sorted() and list.sort() 不再支持 cmp 参数
# Integers
 long 类型更名为 int。int 类型将具备 long 类型的特性。
Old: long(123)  | |
123L  | |
New: long(123)  | |
NameError: name 'long' is not defined  | 
 八进制函数表示差异
Old: 0666
New: 0o666
 删除了 sys.maxint 常量,int 类型大小和平台挂钩,不再依赖类型本身
# Text Vs. Data Instead Of Unicode Vs. 8-bit
废除了 8 位字符串和 Unicode 取而代之使用文本和数据加以区分。
Unicode 文本不在需要用
u来进行修饰,但二进制需要b进行修饰。Old: u"123"
u'123'New: u"123"
'123'Old: b"123"
'123'New: b"123"
b'123'StringIO 和 cStringIO 放入 io 模块了。
basestring抽象类已被删除,使用str代替io.TextIOBase只支持读取 Unicode Text,读取字节流请使用io.TestIOBase.buffer
# 新语法
支持通过
__annotations__获取函数参数和返回值(PEP 3107)In: def foobar(a: int, b: "it's b", c: str = 5) -> tuple:
return a, b, c
foobar.__annotations__Out: {'a': int, 'b': "it's b", 'c': str, 'return': tuple}
支持再可变参数后追加常规参数(PEP 3102)
def test(*arg, defalut=false):
pass加入
nonlocal关键字用于显示的绑定非局部变量,避免在一些不必要的情况下自动从局部变量开始进行绑定。(PEP 3104)扩展的可迭代拆包(PEP 3132)
Old: a, *rest, b = range(5)
SyntaxError: invalid syntaxNew: a, *rest, b = range(5)
In: restOut: [1, 2, 3]
# 修改的语法
新的
raise语句语法(PEP 3109 和 PEP 3134)In: raise ZeroDivisionError,"test error"
Out: SyntaxError: invalid syntax
In: raise ZeroDivisionError("test error")
Out: ZeroDivisionError: test error
新的元类语法(PEP 3115)
Old: class C:
__metaclass__ = MNew: class C(metaclass=M):
加入
...代表EllipsisOld: ...
SyntaxError: invalid syntaxNew: ...
Ellipsis