1.2. Python的版本

Python自诞生到现在已经30多年了,其官方发行了两个大的版本:Python 2和Python 3。Python 2已经在2020年停止官方的维护,本书以Python 3的较新版本作为示例演示。

1.2.1. 1.Python2 与 Python3 的主要区别

1.默认编码

Python2 代码文件默认是ASCII编码;Python3 代码文件默认是UTF-8编码。

同样是字符串类型,在Python2代表的是经过编码后的bytes类型;而Python3中则是Unicode类型。

2.print函数

Python2 中print是语句;Python3 中print()是函数。

# Python2
print 'hello Python'
# Python 3
print('hello Python')

3.True/False

Python2TrueFalse并不是保留字而是全局变量,因此我们甚至可以在编程时改变其值。

当然这就会非常的危险。

Python3中自然就解决了这个隐患,TrueFalse正式被作为保留字,且其值也不再可以被更改。

4.nonlocal

Python3中引入的新的保留字,其作用与global保留字有类型的作用。 所不同的是global是引入全局的变量来替代局部变量;nonlocal则引入全局与局部之间的变量来替代局部变量。

# global demo
j = 1
def foo():
    j = 2
    def bar():
        global j
        j += 1
    bar()
    print(j)    # 2

foo()
# nonlocal demo
j = 1
def foo():
    j = 2
    def bar():
        nonlocal j
        j += 1
    bar()
    print(j)    # 3

foo()

5.异常捕获

异常捕获的差异仅仅体现在语法上的变化。由原来的

# Python2
try:
    1 / 0
except Exception, e:
    pass

改为

# Python3
try:
    1 / 0
except Exception as e:
    pass

6.除法运算符

Python中有2种除法运算符。

  1. /:普通除法

  2. //:地板除,即取整除法,不保留小数部分

Python3中的改变只针对普通除法。把普通除法与地板除的功能分的非常明确。

# Python2
3 / 2       # 1
3 / 2.0     # 1.5

Python3中普通除法不再具备地板除的能力。

# Python3
3 / 2       # 1.5
3 / 2.0     # 1.5

7.range函数

Python3range函数等同于Python2中的xrange。而Python2中存在的xrange则直接在Python3中被移除掉。

8.input函数

Python3input函数等同于Python2中的raw_input。而Python2中存在的raw_input则直接在Python3中被移除掉。

9.file函数

Python2中存在的filePython3中被移除掉,仅保留open函数用于文件的读写操作。

10.<>运算服务

Python2中存在的<>Python3中被移除掉,仅保留!=用于操作数之间的不等于比较。

11.``表达式

Python2中存在的`Python3中被移除掉,仅保留repr`函数用于显示字符串的源信息。

12.long类型

Python2中存在的longPython3中被移除掉,仅保留int代表int、long类型。

13.double类型

Python2中存在的doublePython3中被移除掉,仅保留float代表float、double类型。

1.2.2. 2.公开发行版本

除了官方发行的Python版本(CPython),还有很多其他的公开发行版本。具体的发行版本列表如下。

  • PyPy——JIT版本的Python发行版。

  • Jython——运行于JVM之上的Python发行版。

  • IronPython——运行于.NET之上的Python发行版。

  • Anaconda——专用于科学计算、数据分析、机器学习的发行版。

  • ActivePython——专用于科学计算的Python发行版。

这些发行版本主要解决特定场景的需求,本书所采用的是官方发行的CPython版本。