Python3和Python2的区别

Python 3和Python 2 大部分都是相同的,要知道具体不同的部分可以直接参考文档。这里记录的是我遇到的或者看书看到的Python 2和3的不同点。

  1. Python 3中通过内置的open函数获取文件句柄。该句柄默认会采用UTF-8的格式来操作文件

    而在Python 2中,文件操作的默认编码格式是二进制形式。

  2. Python 3中,bytes是一种包含8位值得序列,str是一种包含Unicode字符的序列。开发者不能以>+等操作符来混同操作bytes和str序列。

    Python2中,str是一种包含8位值的序列,unicode是一种包含Unicode字符的序列。如果str只有7位ASCII字符,那么可以通过想过的操作符同时使用str与unicode。

  3. 在Python 2中,整数除法的结果只包含整数部分,小数部 分被删除。3 / 2 = 1

    在Python3中,3 / 2 = 1.5

  4. Python3中打印print需要加括号,而Python2中不需要

  5. 在Python2中

    range()返回一个递增或递减的数字列表,列表的元素值由三个参数决定

    xrange是一个类,返回的是一个xrange对象。使用xrange()进行遍历,每次遍历只返回一个值。range()返回的是一个列表,一次性计算并返回所有的值。因此,xrange()的执行效率要高于range()

    Python3.3 后

    rangexrange合并了,range不再是列表了,而是类似迭代器

  6. 获取用户输入的函数不同,Python3 使用的是input()函数来提示用户输入,读取用户输入(字符串)而在Python2.7 中则用raw_input(),Python2.7中也有input()函数,但他将用户的输入解读为Python代码,并尝试运行他们。最好的结果是出现错误,指出Python不明白输入的代码;而最糟的结果是,将运行你原本无意运行的代码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Python2.7
    >>> a = raw_input("Please enter somthing: ")
    Please enter somthing: 1 + 3
    >>> a
    '1 + 3'

    >>> b = input("Please enter somthing: ")
    Please enter somthing: 1 + 3
    >>> b
    4
  7. 整数的表示显示不同

    Python 2 中的整数分为一般整数(32位,与机器环境相关)和长整数(无穷精度),并且一个整数可以以l或L结尾,从而强迫其成为长整数。由于当整数的值超过32位时候会自动转换成长整数,不需要自己输入L,当需要额外的精度时Python会自动转换为长整数

    Python 3 ,一般整数和长整数类型已经合二为一了,只有整数这一种,支持Python 2中的表示方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Python 2.7
    >>> import sys
    >>> print(sys.maxint)
    9223372036854775807
    >>> 2 ** 63
    9223372036854775808L
    >>> type(9223372036854775807)
    <type 'int'>
    >>> type(9223372036854775807+1)
    <type 'long'>