我们之前已经完成了对于Python解释器与编辑器的安装,在正式进入Python的学习之前,我们还想需要对一些编程的基础进行一些总结回顾
什么是编程语言?
编程语言的本质就是人与计算机沟通的语言。
编程语言简史
计算机又被称为电脑,人类创造出计算机是为了能够代替部分人们的工作,将庞大的计算工作交给计算机进行,如果计算机无法知晓我们的命令,那他就是一坨废铜烂铁。计算机刚出来的时候使用的是机器语言,机器语言是CPU唯一能够直接读懂的编程语言,最初程序员们是由0和1所代表的打孔条来控制高低电频完成计算机的控制,但这无疑对人们使用计算机的门槛提升到了天堑
#机器语言 来源:https://zhuanlan.zhihu.com/p/108676916 用二进制代码0和1描述的指令称为机器指令,由于计算机内部是基于二进制指令工作的,所以机器语言是直接控制计算机硬件。 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码以及代码的含义,然后在编写程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,不便阅读和书写,还容易出错,且依赖于具体的计算机硬件型号,局限性很大。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。 机器语言是被微处理器理解和使用的,存在有多至100000种机器语言的指令,下述是一些简单示例 #指令部份的示例 0000 代表 加载(LOAD) 0001 代表 存储(STORE) ... #暂存器部份的示例 0000 代表暂存器 A 0001 代表暂存器 B ... #存储器部份的示例 000000000000 代表地址为 0 的存储器 000000000001 代表地址为 1 的存储器 000000010000 代表地址为 16 的存储器 100000000000 代表地址为 2^11 的存储器 #集成示例 0000,0000,000000010000 代表 LOAD A, 16 0000,0001,000000000001 代表 LOAD B, 1 0001,0001,000000010000 代表 STORE B, 16 0001,0001,000000000001 代表 STORE B, 1[1]
在前人们的不断努力之下,引入大量助记符,由助记符编译成机器码发明出来汇编语言
#汇编语言 来源:https://zhuanlan.zhihu.com/p/108676916 汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。 汇编的hello world,打印一句hello world, 需要写十多行,如下 ; hello.asm section .data ; 数据段声明 msg db "Hello, world!", 0xA ; 要输出的字符串 len equ $ - msg ; 字串长度 section .text ; 代码段声明 global _start ; 指定入口函数 _start: ; 在屏幕上显示一个字符串 mov edx, len ; 参数三:字符串长度 mov ecx, msg ; 参数二:要显示的字符串 mov ebx, 1 ; 参数一:文件描述符(stdout) mov eax, 4 ; 系统调用号(sys_write) int 0x80 ; 调用内核功能 ; 退出程序 mov ebx, 0 ; 参数一:退出代码 mov eax, 1 ; 系统调用号(sys_exit) int 0x80 ; 调用内核功能
逐渐开始向人类语言习惯进行转换,后来,计算机编程语言演化出了高级语言的面向过程语言、面向对象语言,逐步形成了今天的样子
高级语言分类
高级语言分类普遍有两种分法,面向过程和面向对象以及解释型语言和编译型语言
Python是面向对象的解释型语言,由于面向对象的含义会在后续讲到,而且解释型语言和编译型语言给人的感官更为直接,所以首先介绍解释型语言和编译型语言
解释型语言
解释型语言不直接转换为机器语言,而是转换成中间代码(例如java转换成字节码),在运行的时候,中间代码发送给解释器,解释器逐句翻译交给CPU执行
解释型语言所写的程序,由于还需要解释器进行翻译,所以运行效率略低,但是,不同平台的问题可以通过使用不同平台对应的解释器进行解决,所以,同一个程序可以在不同的平台上运行
编译型语言
编译型语言在开发完成后就要进行编译,编译过程是先转换成汇编语言,再编译成机器语言,最后在运行的时候直接交给CPU进行执行
编译型语言所写的程序,可以直接交给CPU进行执行,所以运行效率高,但是不同平台底层并不兼容,所以不能跨平台跨系统
Java由于字节码与虚拟机的特例性,目前对于它到底属于解释型语言还是编译型语言,每个人都有不同的看法
效用对比
开发效率
(解释型 > 编译型) > 汇编语言 > 机器语言
执行效率
机器语言 > 汇编语言 > (编译型 > 解释型)
跨平台性:解释型具有极强的跨平台型,而编译型语言需要重新编译调整
计算机组成
聊完了编程语言,我们还需要对计算机的基本组成有简单的了解
计算机的五大部分
-
控制器 计算机的指挥系统,控制计算器其他组件工作
-
运算器 运算器包括数学运算与逻辑运算
控制器+运算器=CPU
-
存储器 计算机的记忆功能,负责数据的存储
- 存储器区分:使用的时候首要要从外存提取到内存中等待运算器与控制区读取
- 内存:又被称为主存储器,基于电工作,存取速度快,但只能临时存储数据,掉电则丢失数据
- 外存:又被称为外部存储设备,例如硬盘,基于磁工作,存取速度相对慢,理论可以永久保存数据
- 存储器区分:使用的时候首要要从外存提取到内存中等待运算器与控制区读取
-
输入(Input)设备 键盘、鼠标等
-
输出(output)设备 显示器、打印机等
软件工作流程简述
程序最先是存放于硬盘中的,程序运行,CPU发出指令,将程序和数据由硬盘加载至内存,CPU与内存读取存储:指令和临时数据,完成程序交互后才将指令和(临时)数据存放到硬盘
由于CPU的存取指令与输入输出的数据都直接来自于内存的交换,所以内存被称为主存
平台与操作系统
平台
我们常说跨平台概念,那么平台是什么呢?
平台具体指的是应用程序的运行平台或者说是用户的使用平台
平台简单来说就是操作系统+计算机硬件
主流平台
- windows+某款硬件
- linux+某款硬件
- ios+iphone/ipad
- 安卓系统+某个厂商的硬件
跨平台就是多个平台不需要单独编译就可以直接使用
操作系统
操作系统是一个协调、管理、控制计算机的硬件资源与应用软件资源的一个控制程序,位于计算机硬件与应用软件间,起到承上启下的作用。
它的核心功能是控制计算机硬件的基本运行,把使用硬件的复杂操作封装成简单的功能,提供给上层应用程序或用户使用。
操作系统都有一个文件系统概念
文件系统就是操作系统给应用程序/用户操作硬盘的功能
软件
计算机硬件是死的,计算机硬件的运行都受软件控制,所以软件相当于计算机的灵魂
软件分类
- 应用软件:应用程序相关逻辑
它的核心功能是控制计算机硬件的基本运行,把使用硬件的复杂操作封装成简单的功能,提供给上层应用程序或用户使用。
操作系统都有一个文件系统概念
文件系统就是操作系统给应用程序/用户操作硬盘的功能
软件
计算机硬件是死的,计算机硬件的运行都受软件控制,所以软件相当于计算机的灵魂
软件分类
- 应用软件:应用程序相关逻辑
- 系统软件:控制底层硬件,并向上提供接口