美文网首页
python2与3主要区别

python2与3主要区别

作者: 冬季恋歌1218 | 来源:发表于2018-04-23 11:12 被阅读21次

    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)   # 输出<type 'int'>

    my_input = raw_input('enter a number: ')

    enter a number: 123

    type(my_input)   #输出<type 'str'>

    python 3中:

    aa=input('enter a number:')

    enter a number:12

    type(aa) #输出<class 'str'>

    9 可迭代对象与列表

    python 2中某些函数和方法返回列表,但在3中返回可迭代对象。需要通过list()函数将可迭代对象转为列表。如下:

    python 2中

    print range(3) #输出[0,1,2]

    print type(range(3)) #输出 <type 'list'>

    python 3中

    print range(3) #输出range(0,3)

    print type(range(3)) #输出<class 'range'>

    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主要区别

          本文链接:https://www.haomeiwen.com/subject/widakftx.html