1.print函数
print语句没有了,取而代之是print()函数
2.编码
python2默认编码是asscii
python3默认编码是UTF-8
这样不再需要在文件顶部写# coding=utf-8
3.字符串
python2中字符串有两个类型
unicode 表示文本字符串
str 表示字节序列
python3做了严格区分
str 表示字符串
byte 表示字节序列,任何需要写入文本或者网络传输的数据都只接收字节序列,阻止了编码错误的问题。
3.range
python2的range和xrange,在python3中合并成了range
4.字典的dict.keys(),dict.values(),dict.items()不再返回列表
而是一个类似迭代器的view对象返回。
a = {'a':'aaa','b':'bbb'}
for x in a.items():
print(x)
#输出
('a', 'aaa')
('b', 'bbb')
5.除法1/2 结果是0.5,不再是0
6.long重命名为int
python3彻底废弃了long+int双整数实现的方法,统一为int,支持高精度整数运算。
7. except Exception, e变成except (Exception) as e
8. for循环变量不会再导致命名空间泄露
i = 1
[i for i in range(3)]
print(i)
#输出为1,而在python2中输出为2
但是如下情况并没有变化
>>> j = 0
>>> for j in range(3):
... print(j)
...
0
1
2
>>> j
2
9.继承
class A:
def __init__(self):
print("A")
class B(A):
pass
class C(A):
def __init__(self):
print("C")
class D(B,C):
pass
d1 = D()
Python2 结果为 A,Python3 结果为 C。
python2 的继承顺序是 D -> B -> A -> C 深度优先 python3 的继承顺序是 D -> B -> C -> A 广度优先
10.模块改名
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib放进了http里面
urllib
, urllib2, urlparse, robotparse放进了
urllib
里面
11.如果在python2中使用python3的语法则可以使用__futrue__
如想要1/2为0.5可以如下
>>> from __future__ import division
>>> 1/2
0.5
12. 迭代器的 .next()属性报错
>>> a = (i for i in 'abc') #圆括号生成迭代器
>>> next(a)
'a'
>>> a.next()
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'generator' object has no attribute 'next'