第1章 Python简介
Python语言是一种面向对象的解释型高级编程语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。
目前,Python语言有两个版本:Python 2.x和Python 3.x,这两个版本不能够完全兼容。Python官方(www.python.org)宣布,2020 年1月1日起,停止对Python 2.x版本的更新。Python 2.7被确定为最后一个 Python 2.x版本。本教程介绍的是Python 3.x版本的内容。
Python语言的主要有以下优点:
(1)Python语言简单易学、功能强大、开源免费。
(2)Python语言是一种解释型的编程语言,程序源码可跨平台运行。运行Python程序时,由Python解释器将程序的源码临时转换成机器指令,一边转换一边执行;通过不同的Python解释器,可将相同的Python程序源码转换成不同平台(Linux、Windows、Mac OS等)下的机器指令。
(3)Python语言是一种面向对象的编程语言,但同时也支持面向过程编程。
(4)Python有丰富的库。Python本身就自带了非常完善的基础代码库(标准库),覆盖了网络、文件、GUI、数据库、文本等多方面的大量内容。另外,Python还有大量的第三方库(如:PyPI,Python Package Index)。所以,用户使用Python语言开发程序时,许多功能都不必从头开始编写,大大加快了程序开发的速度。
(5)Python具有可扩展性。如果需要代码的某一重要部分能够更快速地运行或者不希望被公开,你可以用C或C++语言编写这部分程序,然后在Python程序中调用它们。
(6)Python具有可嵌入性。通过在C或C++程序中嵌入Python代码,可以向程序的用户提供脚本功能。
当然,Python语言也有一些解释型编程语言普遍存在的缺点,如:运行速度相对较慢、代码加密困难。
Python作为一种功能十分强大的编程语言,其应用领域非常广泛,如:Web应用开发、自动化运维、人工智能、网络爬虫、科学计算、游戏开发等。特别是在人工智能领域,Python在机器学习、深度学习等方面都是首选的编程语言,目前世界上优秀的人工智能学习框架,如:Google的TransorFlow、FaceBook 的PyTorch以及开源社区的Karas神经网络库等,都是用Python实现的。
1.1 Python解释器
1.1.1 什么是解释器?
编写好的Python程序代码都要放在Python解释器中运行。Python解释器本身就是一个可执行的程序,其基本功能就是将Python程序源码翻译成CPU可执行的机器指令,并且是一边翻译、一边执行。基于Python的开放性,目前存在着用不同语言编写的多种Python解释器,如:用C语言编写的Python解释器CPython(Python解释器的官方版本)、用Java语言编写的Python解释器Jython等。
本教程中使用的解释器是应用最为广泛的CPython。Ubuntu 20.04系统中已经自带了Python3,它包含了能保证Python3程序运行的两个必要组件:解释器和标准库。
1.1.2 查看解释器的版本号
在终端中执行以下命令,可以查看Python3的具体版本号:
python3 -V
或者
python3 --version
上述命令执行的结果如下:
Python 3.8.10
1.1.3 Python代码的执行过程
Python解释器运行Python程序源码的过程主要分两步:
(1)第一步:将Python程序源码全部翻译成字节码,称为“编译”。
字节码并不是CPU可以直接运行的机器指令,仍然是属于源码层次范围内的底层代码,所以字节码仍然是与平台无关的,和源码一样可以跨平台运行,但程序从字节码开始运行比从源码开始运行的速度要快很多。
如果Python解释器拥有写入权限,那么在它第一次运行程序源码的时候会将翻译出来的字节码保存为一个以 .pyc
为扩展名的文件,下次运行程序的时候,如果在上次保存过字节码后没有修改过源码,Python解释器就会直接加载原来的 .pyc
文件。
(2)第二步:将Python程序字节码翻译机器指令并执行,称为“解释”。
在这一步中,Python字节码被交给Python虚拟机(PVM)翻译成机器指令,再由CPU执行,而且是一边翻译一边执行。
1.1.4 内建模块与标准库
Python3解释器中有一个名为 builtins
的内建模块,它是解释器的一部分。在内建模块中,定义了一些编程时常用的变量、函数和类。例如:在内建模块中定义的函数,通常被称为内建函数。解释器启动后,会自动将内建模块中的内容加载到内存(注意:内建模块的名字并没有被加载),所以当需要使用内建模块中的变量、函数或类的时候,可以直接使用,不必在程序中导入内建模块,也不用将内建模块的名字作为它们的前缀。
标准库相当于解释器的外部扩展,包含了很多模块。与内建模块不同,标准库中的模块一般不会随着解释器的启动而生效,要想使用某个模块中定义的内容(如:函数),必须在程序中提前导入这个模块。
本文在CSDN、公众号、头条号和知乎同步发布,感谢关注。