计算机硬件的基本特性有哪些?如何利用Python的IDLE开发环境?

发表时间: 2020-03-02 09:14

对于普通计算机用户来说,计算机程序或应用程序来自因特网或光盘(CD),然后在计算机或智能手机上运行。对于计算机程序员来说,程序是计算机执行的一组指令,用来完成精确定义的任务。实际上,计算机编程不仅是用特定的编程语言(如Python)“编写”这些指令。它涉及许多技能,包括设计软件、设计“算法”、设计“用户界面”(窗口、命令、菜单、工具栏等)、编写并测试代码,以及与软件用户交流互动等。

在本文中,我们将介绍计算机硬件的基本特性,解释编译器和解释器之间的区别,并展示如何使用Python的IDLE开发环境。

1.1 CPU和内存

计算机的核心是中央处理器(CPU)。在个人计算机中,CPU是由微小的硅芯片制成的微处理器。该芯片上刻有数百万个晶体管。晶体管是一种微型数字开关:它控制信号的两种状态,“开”或“关”,即“1”或“0”。微处理器由小于1平方英寸的陶瓷外壳保护,安装在印制电路板(也称为主板)上。主板上还有内存芯片,以及用于连接其他设备的端口(见图1-1)。

图1-1 树莓派3 B型单板计算机,放在3.5平方英寸×2.25平方英寸的印制电路板上

计算机存储器是一系列统一的存储单元,这些单元称为“字节”。

1字节保存8位信息。

1位是最小的信息存储单元:“1”或“0”,“真”或“假”,“开”或“关”。

CPU可以按任意顺序访问内存中的字节。这就是计算机内存被称为“随机存取存储器(RAM)”的原因。同样的内存用于存储不同类型的信息:数字、字母、声音、图像、程序等。这些信息,必须以某种方式编码为0和1的序列。

2019年生产的典型个人计算机具有8GB(千兆字节)的RAM。

1 K字节(KB)= 1024字节 = 210字节,大约一千字节。1 M字节(MB,“兆”)= 1024 K字节 = 220字节= 1,048,576字节,大约一百万字节。1 G字节(GB,“吉”)= 1024 M字节 = 230字节 = 1,073,741,824字节,大约10亿字节。1 T字节(TB)= 1024 G字节 = 240字节。1 P字节(PB)= 1024 T字节 = 250字节。

一页有500~600个单词的文本,没有图片或特殊格式,大约需要3KB的存储空间;一张高分辨率照片可能需要2~3MB的存储空间,而1GB存储空间可以压缩的MP4格式保存数小时的视频。

CPU解释并执行存储在RAM中的指令。CPU获取下一条指令,解释它的操作代码,并执行适当的操作。有些指令用于算术和逻辑运算,有些用于将字节从一个位置复制到另一个位置,还有一些用于改变指令的执行顺序。除非特定指令告诉CPU“跳转”到程序中的另一个位置,否则指令将按顺序执行。“条件分支”指令告诉CPU继续下一条指令或跳转到另一个位置,具体情况取决于前一操作的结果。

以上这些操作都以惊人的速度发生。现代CPU以几GHz的速度运行,每条指令需要一个或几个时钟周期。

为了更好地了解CPU指令及其执行方式,让我们来看看“汇编语言”,这是一种低级计算机语言。它是你所听过的现代语言的基础,如C++、Java、JavaScript和Python。

图1-2展示了一个非常短的汇编语言程序,用于8088微处理器(在20世纪80年代早期用于最初的IBM PC),其中包含相应指令的十六进制代码(十六进制系统在第6章中解释)和我们的注释。汇编语言代码非常接近实际的机器代码,但它允许你使用名称而不是数字,来表示指令和内存位置。

CPU有几个内置存储器单元,称为寄存器。图1-2中的代码使用的两个寄存器,称为AX和BX。例如,第一条代码(MOV BX, 0000)将0移入BX寄存器。

图1-2 一段8088汇编语言代码

我们将它留给你作为练习(练习题6),请弄清楚这段代码计算的内容。结果存储在BX寄存器中。

计算机代码中的错误称为“缺陷(bug)”,消除程序错误的过程称为“调试(debug)”。

图1-2中的代码是在一个名为debug的程序的帮助下生成的,该程序随MS-DOS操作系统和早期版本的Windows一起提供。调试程序允许程序员以受控方式逐步执行程序,并在每一步检查内存的内容。在程序未按预期工作时,使用调试程序可以帮助发现错误。

1.2 Python解释器

以数字序列的方式来编写程序是非常烦琐的(尽管在计算机时代的早期阶段,程序员就是这么做的)。幸运的是,人们很快意识到,他们可以为编写程序而定义特殊的语言,并使用计算机将程序从高级编程语言转换为机器代码。早期的编程语言有Fortran、COBOL和BASIC。今天流行的语言有C++、C#、Java和JavaScript等。Python是另一种非常流行的编程语言:它是由荷兰数学中心(Stichting Mathematisch Centrum)的Guido van Rossum于20世纪90年代初发明的。[1]

在高级编程语言中,每个语句都转换为多个CPU指令。图1-3展示了一个用Python编写的函数,它由一个文档字符串(Docstring,三引号中的一段注释,帮助使用该函数)和一些语句组成。

图1-3 用Python编写的函数

用机器语言或汇编语言编写的程序仅适用于具有兼容性CPU的计算机。换句话说,命令/语句限定于特定的CPU。用高级语言编写的程序可以与任何CPU一起使用。例如,它可以在PC或Mac上运行。

✦ ✦ ✦

有两种方法,可以将高级编程语言编写的程序转换为机器代码。第一种方法称为“编译”:一种称为“编译器”的特殊程序,检查高级语言编写的程序文本,生成适当的机器语言指令,并将它们保存在一个可执行文件中,该文件可以在计算机上运行。程序编译后,运行该文件就不需要编译器了。第二种方法称为“解释”:一种称为“解释器”的特殊程序,检查程序的文本,生成适当的指令,并立即执行这些指令。解释器不会创建可执行文件,每次运行程序都需要解释器。

编译就像外语教材的书面翻译一样,解释就像在外国人说话的同时进行同声翻译。解释器可以从文件中读取程序,也可以允许你以交互方式逐行输入程序语句。

一些现代语言(如Java)使用混合的方法。首先,它们将程序编译成一种称为“字节码”的中间低级语言,它仍然独立于特定的CPU,但更紧凑,更接近机器语言。然后它们在解释字节码时执行程序。Python也将“模块(函数库)”预编译为字节码。

✦ ✦ ✦

程序的文本由相当严格的语法规则控制:你不能简单地输入随心所欲的内容,并指望计算机理解它。

程序中的每个符号都必须位于正确的位置。

在英语或其他自然语言中,你可以拼错一个单词或省略一些标点符号,但仍然可以生成可读的文本。这是因为自然语言具有“冗余”,信息以低于最佳效率的方式传输,但这导致即使它有某种乱码,读者仍可以正确地解释消息(见图1-4)。

图1-4 Lyla Fletcher Groom的故事,5岁(由写作研讨会提供)

编程语言实际上没有冗余,几乎每个字符都是必不可少的。编程中很可能会犯错误,因此编程人员必须学会耐心并注重细节,在修复代码的错误时坚持不懈。

✦ ✦ ✦

我们现在准备使用Python。根据开源许可证,Python可免费获得,即使是商业应用程序也是如此。Python许可证由Python Software Foundation管理。

在本书中,我们将使用Python 3,即Python的较新版本。

早期版本的Python称为“Python 2”。Python 2和Python 3之间存在一些差异——它们不是百分之百兼容。在撰写本书时,Python 3的最新版本是3.7.3。

关于如何下载适用于你的计算机和操作系统的Python安装程序,请参阅其他相关入门教程。

✦ ✦ ✦

在编译语言时,你需要创建程序文本,并将它保存在一个文件中,称为“源代码”,然后让源代码文件通过编译器运行,以得到可执行程序。在Python中,你可以从源文件中读取程序,也可以在Python解释器Shell中输入单个语句,并立即查看结果。

使用GUI(图形用户界面)前端运行Python解释器很方便。标准安装的Python附带的GUI称为IDLE(见图1-5)。

图1-5 在Windows系统中,Python的GUI“Shell”,称为IDLE

>>>是Python解释器的“提示符”。提示符是来自程序的信号,表示它正在等待用户输入。用户可以输入语句,当用户按<Enter>键时,解释器会显示结果。

例如,输入:

>>> 2+3 <Enter>

(用户输入以粗体显示)。Python会显示:

5>>>

看起来很不错!这里发生了很多事情。解释器读取你输入的文本行(语句),然后分析文本并发现该语句有两个用+号分隔的数字。分析文本并提取它的组件的过程称为“解析”。

一些小实验会让你相信空格并不重要(只要语句在提示后立即开始,没有前导空格)。例如,你可以输入2 + 3或2 + 3或2 + 3——结果相同。但是如果你输入2 + * 3,你就会得到:

>>> 2+*3      ^SyntaxError: invalid syntax>>> 

现在尝试:

>>> 2(3+4)

你预期会得到14,对吗?没有!你得到的是:

Traceback (most recent call last):  File "<pyshell#4>", line 1, in <module>    2(3+4)TypeError: 'int' object is not callable

显然,Python解释器“认为”你输入的语句有问题。但是,Python(让我们将解释器简称为Python)不是报告语法错误,而是报告了别的内容,这似乎没有什么帮助。TypeError指的是一个对象的“类型”(一个整数、一个函数等),而不是你在键盘上输入的内容。显然Python已经断定你试图用一个名为2的函数调用输入值3 + 4,所以Python告诉你(以它自己神秘的方式),2不是一个函数。你可能会认为Python有时非常愚蠢。事实上,它既不聪明也不愚蠢——它只是一段代码。

同时,你真正的意思是:

>>> 2*(3+4)

也许你认为乘法符号是可省略的,就像在数学中一样。不是这样。正如我们告诉过你:每个字符都很重要!

1.3 使用IDLE

IDLE是一个简单的IDE(集成开发环境),用于编辑和运行Python代码。[2]

可以将简短的程序直接输入Shell:

>>> s = 0>>> for k in range(1, 7):        s += k        print(k, s)1 12 33 64 105 156 21>>> 

但这并不是很实用,因为你必须重新输入每条语句,才能再次运行程序或对它进行小修改。在IDLE中,你可以复制以前的一个语句:将光标向上移动到相应的行,然后按<Enter>键。接着,你可以编辑该语句。

不过,重新输入每行代码太乏味了。将程序语句保存在文件中并从文件中执行程序,这样更实用。包含程序文本的文件称为源文件。Python源文件名的扩展名通常为.py。

你可以用任意的文本编辑器(如记事本)创建源文件。你甚至可以用文字处理程序,只需确保将文件另存为“纯文本”文件,并使用.py的替换文件名中的默认扩展名.txt。但是,编写简短Python程序最简单的方法是使用IDLE自带的内置编辑器。

在IDLE中打开新的编辑器窗口,请从File菜单中选择New File(或按<Ctrl+N>快捷键)。然后输入你的代码。如图1-6所示。

与纯文本编辑器(如记事本)不同,IDLE编辑器“了解”Python的某些特性。例如,它用不同颜色高亮显示了代码的不同元素。对于预期有缩进的语句,IDLE编辑器会自动增加“缩进”(向右移动):在for、while、if、else的冒号之后。按<BackSpace>键可以减少缩进级别。从File菜单中选择Save As...或按<Ctrl+Shift+S>快捷键,将程序保存到文件中。将.py扩展名与文件名一起使用,将文件保存在你选择的文件夹中。例如,C:\PythonProjects。

图1-6 使用IDLE编辑器输入代码

当IDLE编辑器窗口打开并处于活动状态时,你可以通过从Run菜单中选择Run Module或按F5键来测试程序。Python每次都会询问你是否要保存文件(单击Yes),你可以使用Options => Configure IDLE命令来禁用此功能。

如果程序有语法错误,Python会提醒你,并高亮显示第一个错误(发现分号而不是冒号)。如图1-7所示。

图1-7 Python显示语法错误

你可以同时打开多个文件,并在同一窗口中或在不同窗口间剪切和粘贴文本。选中并高亮显示要复制的文本,按<Ctrl+C>快捷键复制文本,将光标定位在插入点,然后按<Ctrl+V>快捷键粘贴文本。


-END-

喜欢的朋友欢迎转发到朋友圈

关注【异步图书】微信公众号,回复VIP免费获取异步社区VIP会员卡,近千本电子书、在线专栏和视频课免费学。