1.python2中print是一个语句,可以带括号或不带括号输出。而python 3中print是一个函数,必须带括号输出。
2. 整数除法的区别。
python 2中 3/2 = 1 3//2 = 1 3/2.0=1.5 3//2.0 = 1.0
python 3中 3/2 = 1.5 3//2 = 1 3/2.0=1.5 3//2.0 = 1.0
3.python 2中有xrange()和range(). python 3中,range()的实现方式和2中的xrange()的实现方式一致。故3中只有range()没有xrange()。另外,3中的range对象有__contains__方法。所以在3中查找整数或布尔型速度会加快很多。
x = 10000000
def val_in_range(x, val):
return val in range(x)
%timeit val_in_range(x, x/2) # 742 ms per loop
%timeit val_in_range(x, x//2) # 1.19 µs per loop
4.触发异常的区别。
python 2中触发异常可以用raise IOError, "file error"或raise IOError("file error")两种方式。
python 3中触发异常只能用raise IOError("file error")。
5.异常处理的区别。
python 2中异常处理用except NameError, err:
python 3中异常处理用except NameError as err:
6.next()函数和.next()方法的区别
my_generator = (letter for letter in 'abcdefg')
python 2中可以用 next(my_generator) 和 my_generator.next() 两种方式。
python 3中只能用 next(my_generator)这种方式。
7.for循环变量与全局命名空间泄漏
在python 2中 for中的循环变量会影响到全局。如下:
i = 1
print 'before: i =', i #输出 1
print 'comprehension: ', [i for i in range(5)] #输出[0,1,2,3,4]
print 'after: i =', i #输出4
在python 3中循环控制变量不会再泄漏到循环周围的空间中了。同时,列表推导不再支持[... for var in item1, item2, ...]这样的语法,使用[... for var in (item1, item2, ...)]代替。如下:
i = 1
print 'before: i =', i #输出 1
print 'comprehension: ', [i for i in range(5)] #输出[0,1,2,3,4]
print 'after: i =', i #输出1
8.input的区别
python 2 中通过input 输入的类型是 int,只有通过 raw_input()输入的类型才是str.
python 3中通过input输入的类型是str。如
python 2中:
my_input = input('enter a number: ')
enter a number: 123
type(my_input) # 输出
my_input = raw_input('enter a number: ')
enter a number: 123
type(my_input) #输出
python 3中:
aa=input('enter a number:')
enter a number:12
type(aa) #输出
9 可迭代对象与列表
python 2中某些函数和方法返回列表,但在3中返回可迭代对象。需要通过list()函数将可迭代对象转为列表。如下:
python 2中
print range(3) #输出[0,1,2]
print type(range(3)) #输出
python 3中
print range(3) #输出range(0,3)
print type(range(3)) #输出
print(list(range(3))) #输出[0,1,2]
10.比较操作符
Python 2 中任意两个对象都可以比较
11 < 'test' #True
Python 3中只有同一数据类型的对象可以比较
11 < 'test' # TypeError: unorderable types: int() < str()
11.废弃类差异
废弃类差异
print语句被python3废弃,统一使用print函数
exec语句被python3废弃,统一使用exec函数
execfile语句被Python3废弃,推荐使用exec(open("./filename").read())
不相等操作符"<>"被Python3废弃,统一使用"!="
long整数类型被Python3废弃,统一使用int
xrange函数被Python3废弃,统一使用range,Python3中range的机制也进行修改并提高了大数据集生成效率
Python3中这些方法不再返回list对象:dictionary关联的keys()、values()、items(),zip(),map(),filter(),但是可以通过list强行转换:
mydict={"a":1,"b":2,"c":3}
mydict.keys() #
list(mydict.keys()) #['a', 'c', 'b']
迭代器iterator的next()函数被Python3废弃,统一使用next(iterator)
raw_input函数被Python3废弃,统一使用input函数
字典变量的has_key函数被Python废弃,统一使用in关键词
file函数被Python3废弃,统一使用open来处理文件,可以通过io.IOBase检查文件类型
apply函数被Python3废弃
异常StandardError 被Python3废弃,统一使用Exception