概要:在这篇记录中,我们将安装Python以及写出第一个python程序。

安装python

笔者安装的是3.12.2版本的Python,[download](Python Release Python 3.12.2 | Python.org),下拉到最后Files,我是windows系统所以选择的Windows installer (64-bit),大家按照自己的需要下载就好,记得在安装时需要勾选Add Python 3.5 to PATH哦,这是将Python解释器的安装路径添加到系统的环境变量中。(环境变量是操作系统中用来指示系统在执行命令时查找程序文件的路径之一。添加Python到PATH中使得你可以在命令行或者终端中直接通过输入“python”命令来调用Python解释器,而不需要输入完整的Python安装路径。这样做有助于方便地在命令行中使用Python。)

另外Python解释器不是只有官方的这一种,CPython(用C语言开发的),还有IPython、Jython、PyPy等等。这些解释器可以帮助我们运行以.py为扩展名的文本文件。

Python是解释型语言,需要翻译成CPU能理解的机器码,才能运行。

交互环境

在命令行,敲入python,如果出现>>>,说明你安装成功了,我们已经在python交互环境中了,输入任何Python代码,回车后会立刻得到执行结果。输入exit()并回车,就可以退出Python交互式环境(直接关掉命令行窗口也可以)。

来输入我们的经典程序吧:

1
print('hello, world')

到这里就先停手了,学习一门语言,不能光记语法,而是要先思考这个语言解决了什么问题?它能带给你什么帮助?之后再去一步步学习

荷兰的计算机程序员吉多·范罗苏姆(Guido Van Rossum)创建了 Python。他于 1989 年在荷兰国家数学与计算机科学研究中心 (CWI) 开启了 Python 之旅,最初只是为在圣诞节期间能保持依旧忙碌的业余爱好。语言的名字受 BBC 电视剧《巨蟒剧团之飞翔的马戏团》的启发,因为吉多·范罗苏姆是该剧的忠实粉丝。

  • 1991 年发布了首版 Python 代码(版本 0.9.0)。其已包括一些优秀功能,例如一些用于错误处理的数据类型和函数。
  • Python 1.0 于 1994 年发布,提供轻松处理数据列表的新函数,例如映射、筛选和减少。
  • Python 2.0 于 2000 年 10 月 16 日发布,为程序员提供新的有用功能,例如支持 Unicode 字符和以较短方式遍历列表。
  • Python 3.0 于 2008 年 12 月 3 日发布。其包括更多功能,例如打印函数,为数字除法和错误处理提供更多支持。

Python语法简洁清晰,易于学习和理解且跨平台,拥有丰富的标准库和第三方库,可以在数据科学和机器学习、软件开发、软件测试自动化自动化(Python 单元测试框架例如 Unittest、Robot 和 PyUnit,测试其编写的函数;可以使用多种工具自动运行测试脚本。这些工具称为持续集成/持续部署 (CI/CD) 工具。软件测试人员和开发人员使用 CI/CD 工具(例如 Travis CI 和 Jenkins)自动化测试)等方面提供巨大的助力。

编译过程

在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算机上的机器语言还是虚拟机的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可以将程序设计语言划分为两大类:编译型语言和解释型语言。

  • 编译实现的语言,如:C、C++、Fortran、Pascal、Ada。由编译型语言编写的源程序需要经过编译,汇编和链接才能输出目标代码,然后由机器执行目标代码。目标代码是有机器指令组成,不能独立运行,因为源程序中可能使用了一些汇编程序不能解释引用的库函数,而库函数又不在源程序中,此时还需要链接程序完成外部引用和目标模板调用的链接任务,最后才能输出可执行代码。
  • 解释型语言,解释器不产生目标机器代码,而是产生中间代码,这种中间代码与机器代码不同,中间代码的解释是由软件支持的,不能直接使用在硬件上。该软件解释器通常会导致执行效率较低,用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。和编译的程序不同的是, 解释程序的任务是逐一将源代码的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码再执行。对于解释型语言,需要一个专门的解释器来执行该程序,每条语句只有在执行是才能被翻译,这种解释型语言每执行一次就翻译一次,因而效率低下。

Python就是一门解释型语言,和我们熟知的JavaScript一样,都需要先将源代码转换成中间表示形式(字节码或),然后执行这些中间表示形式来完成程序的功能。但不同的是,Python的字节码是在运行时即时生成的,而JavaScript的字节码(如果是基于V8引擎的话)通常是预先编译好的。现在我们来看看,编译模型和具体的编译流程:

处理器主要由三部分组成: 编译器(Compiler),运行时(Runtime),库(Lib)。

  • 编译器(Compiler): 顾名思义,就是编译源码的程序。通常情况下,它会将源码编译成运行时(Runtime)识别的中间码,但是在极端情况下,如 C 中,因为没有运行时(Runtime),就直接输出机器码了。编译器(Compiler)在这过程中可能还会自己对源码进行优化,并剔除一些运行不必要的信息,比如注释等。
  • 运行时程序(Runtime): 这个程序用于代码的具体执行,最被熟知的是 JVM,所以也可以把它叫做虚拟机好了,Python中对应的虚拟机就是CPython、PyPy、Jython等。
  • 库(Lib): 库很好理解,就好比一个词典,运行这个程序所需要的一些额外支持。最基础的,标准库应该包含基本的 IO 库,如 stdio.h,还有平台所提供的系统调用等等。

下面是完整的编译过程

  1. 将源代码进行词法分析和语法分析,将代码分解为标记(tokens)并形成抽象语法树(Abstract Syntax Tree)
  2. 将抽象语法树转换为字节码(bytecode)
  3. 将字节码(bytecode) 发送给虚拟机,虚拟机将字节码翻译成机器码并在CPU上执行

字节码是相对于机器码的存在。机器码是 CPU 能读懂的机器指令,所有指令都包含在一个指令集里面,那字节码就是虚拟机能理解的指令。

虚拟机不是KVM,VMware 虚拟机,指的是在软件层面模拟了 CPU 执行逻辑的程序。用于解析程序指令。

疑问解答

1.Python和JavaScript有什么不同呢?

  1. 用途
    • Python通常用于后端开发(如Web开发、数据分析、人工智能等)、科学计算、系统管理等领域。
    • JavaScript则主要用于前端开发,用于网页交互、动态内容生成、浏览器扩展等,但也可以在后端使用Node.js进行服务器端开发。
  2. 语法
    • Python采用了缩进来表示代码块的结构,而JavaScript使用花括号{}。
    • Python更加强调代码的可读性和简洁性,语法相对简单直观。
    • JavaScript的语法更加灵活,支持面向对象、函数式编程等多种编程范式。
  3. 类型系统
    • Python是动态类型语言,变量的类型在运行时根据赋值确定,并且支持强类型和弱类型的混合。
    • JavaScript也是动态类型语言,但有时会表现出一些隐式类型转换的特性,使得一些类型判断相对复杂。
  4. 并发模型
    • Python的并发模型主要是基于多线程和多进程,但由于GIL(全局解释器锁)的存在,多线程并发性能有限。
    • JavaScript的并发模型主要基于事件驱动和回调函数,通过异步编程来实现并发,也支持Promise和async/await等新的语言特性来简化异步编程。
  5. 生态系统
    • Python拥有丰富的第三方库和框架,如Django、Flask、NumPy、Pandas等,适用于各种不同的应用场景。
    • JavaScript的生态系统也非常庞大,特别是在前端开发领域,有很多优秀的框架和工具,如React、Vue.js、Angular等。

2.有推荐的Python插件吗?

笔者用的vscdoe,目前安装了下面几个插件

美化插件:Black Formatter

debug插件:Python Debugger

语法提示插件:Python

静态检查插件:Pylance

参考链接

Python 从源码到执行

python编译过程和执行原理