python2与3主要区别

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

你可能感兴趣的:(python2与3主要区别)