一 引子
基于上一章所学,有了计算机硬件,再在硬件之上安装好操作系统,我们就有了一个应用程序的运行平台,我们接下来的任务就是学习如何使用某款编程语言来开发应用程序。
本章的主题是先了解一下编程语言,然后重点介绍python这门编程语言。
二 编程语言分类
2.1 机器语言
机器语言是站在计算机(奴隶)的角度,说计算机能听懂/理解的语言,而计算机能直接理解的就是二进制指令,所以机器语言就是直接用二进制编程,这意味着机器语言是直接操作硬件的,因此机器语言属于低级语言,此处的低级指的是底层、贴近计算机硬件(贴近代指需要详细了解计算机硬件细节、直接控制硬件),详解如下:
用二进制代码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]
总结机器语言优缺点:
优点:
编写的程序可以被计算机无障碍理解、直接运行,执行效率高 。
缺点:
1、复杂,开发效率低。
2、贴近依赖具体的硬件,跨平台性差。
2.2 汇编语言
汇编语言仅仅是用一个英文标签代表一组二进制指令,毫无疑问,比起机器语言,汇编语言是一种进步,但汇编语言的本质仍然是直接操作硬件,因此汇编语言仍是比较低级/底层的语言、贴近计算机硬件。
汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
汇编的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 ; 调用内核功能
总结汇编语言优缺点:
优点:
相对于机器语言,使用英文标签编写程序相对简单,执行效率稍低,开发效率稍高。
缺点:
1、仍然是直接操作硬件,比起机器语言来说,复杂度稍低,但依旧居高不下,所以开发效率依旧较低。
2、依赖具体的硬件,跨平台性差。
2.3 高级语言
高级语言是站在人(奴隶主)的角度,说人话,即用人类的字符去编写程序,而人类的字符是在向操作系统发送指令,而非直接操作硬件,所以高级语言是与操作系统打交道的,此处的高级指的是高层、开发者无需考虑硬件细节,因而开发效率可以得到极大的提升,但正因为高级语言离硬件较远,更贴近人类语言,人类可以理解,而计算机则需要通过翻译才能理解,所以执行效率会低于低级语言。
按照翻译的方式的不同,高级语言又分为两种:
2.3.1 编译型(如C语言):
类似谷歌翻译,是把程序所有代码编译成计算机能识别的二进制指令,之后操作系统会拿着编译好的二进制指令直接操作硬件,优缺点如下:
优点:
编译一次之后就可以拿着结果重复运行,而无需再次翻译,执行效率高于解释型。
缺点:
编译型代码是针对某一个平台翻译的,当前平台翻译的结果无法拿到另外一个平台使用,即无法跨平台。
2.3.2 解释型(如python):
类似同声翻译,需要有一个解释器,解释器会读取程序代码,一边翻译一边执行,优缺点如下:
优点:
代码运行是依赖于解释器,不同平台有对应版本的解释器,所以代码是可以跨平台运行。
缺点:
每次执行都需要翻译,执行效率低于编译型。
2.4 总结
综上选择不同编程语言来开发应用程序对比:
1、执行效率:机器语言 > 汇编语言 > 高级语言(编译型 > 解释型)
2、开发效率:机器语言 < 汇编语言 < 高级语言(编译型 < 解释型)
3、跨平台性:解释型具有极强的跨平台型
由于我们开发是应用程序,而应用程序必须运行于某一个平台之上,应用程序的快慢受限于平台(就好比F1赛车与宝马车同时跑在北京五环高速,都受限于道路环境,车速是差不多的)的快慢,并不是单从语言层面就可以提升整体执行效率的,于是开发效率、跨平台性才是我们需要优先考虑的问题,这就是我们首选Python的原因。
三 Python介绍
谈及Python,涉及两层意思,一层代表的是Python这门语言的语法风格,另外一层代表的则是专门用来解释该语法风格的应用程序:Python解释器。
Python的创始人为吉多·范罗苏姆(Guido van Rossum)。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus,他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,语法能够像shell一样简洁,易学易用、可拓展性强,同时兼顾C的强大功能。于是Guido在1989年的圣诞节期间,开始编写能够解释Python语言语法的解释器。
Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。最新的TIOBE排行榜https://www.tiobe.com/tiobe-index/,Python已飙升至世界第三。
Python可以应用于众多领域,如:人工智能、数据分析、爬虫、金融量化、云计算、WEB开发、自动化运维/测试、游戏开发、网络服务、图像处理等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。
3.1 Python解释器的发展史
如果想详细了解自行百度查询即可。
注意:
因为很多公司已经基于2.0版本开发出了大量程序,公司已然投入了大量的人财物力,这就导致大家都拒绝升级3.0,无奈官方只能推出2.7过渡版本。我们现在以3.0版本为主,在必要时指出与2.0版本的区别。
3.2 Python解释器有哪些种类?
1.CPython:
官方的Python解释器本质就是基于C语言开发的一个软件,该软件的功能就是读取以.py结尾的文件内容,然后按照Guido定义好的语法和规则去翻译并执行相应的代码。这种用C实现的解释器称为CPython,它是Python领域性能最好,应用最广泛的一款解释器,我们在后面提到的解释器指的都是CPython解释器。但其实解释器作为一款应用软件,完全可以采用其他语言来开发,只要能解释Python这门语言的语法即可。Python解释器的一些种类如下:
2.JPython:
JPython解释器是用JAVA编写的Python解释器,可以直接把Python代码编译成Java字节码并执行,它不但使基于Java的项目之上嵌入Python脚本成为可能,同时也可以将Java程序引入到Python程序之中。
3.IPython:
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。这就好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用 >>> 作为提示符,而IPython用In [序号]:作为提示符。
4.PyPy:
PyPy是Python开发者为了更好地Hack Python而用Python语言实现的Python解释器。PyPy提供了JIT编译器和沙盒功能,对Python代码进行动态编译(注意不是解释),因此运行速度比CPython还要快。
5.IronPython:
IronPython和JPython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
四 安装Cpython解释器
Python解释器目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python解释器,在Windows系统上需要安装一下,具体步骤百度查询即可。官网地址:https://www.python.org
五 第一个python程序
5.1 运行python程序有两种方式
方式一: 交互式模式
方式二:脚本文件
1、打开一个文本编辑工具,写入下述代码,并保存文件,此处文件的路径为D: est.py。强调:python解释器执行程序是解释执行,解释的根本就是打开文件读内容,因此文件的后缀名没有硬性限制,但通常定义为.py结尾。
print('hello world')
2、打开cmd,运行命令,如下图:
总结:
1、交互式模式下可以即时得到代码执行结果,调试程序十分方便。
2、若想将代码永久保存下来,则必须将代码写入文件中。
3、我们以后主要就是在代码写入文件中,偶尔需要打开交互式模式调试某段代码、验证结果。
5.2 注释
在正式学习python语法前,我们必须事先介绍一个非常重要的语法:注释。
1、什么是注释?
注释就是就是对代码的解释说明,注释的内容不会被当作代码运行。
2、为什么要注释?
增强代码的可读性。
3、怎么用注释?
代码注释分单行和多行注释。
1、单行注释用#号,可以跟在代码的正上方或者正后方
# 我是正上方注释
print("hello python!") # 我是正后方注释
2、多行注释可以用三对双引号或者三对单引号
"""
我是注释
我可以多行
"""
'''
巧了,我也是注释
我也可以多行
'''
4、代码注释的原则:
1、不用全部加注释,只需要为自己觉得重要或不好理解的部分加注释即可。
2、注释可以用中文或英文,但不要用拼音。
六 IDE工具Pycharm的使用
6.1、什么是IDE?为何要有IDE?
在编写第一个Python程序时,存在以下问题,严重影响开发效率。
问题一:我们了解到一个Python程序从开发到运行需要操作至少两个软件:
1、打开一个软件:文本编辑器,创建文本来编写程序。
2、打开cmd,然后输入命令执行Python程序。
问题二:在开发过程中,并没代码提示以及纠错功能。
综上,如果能有一款工具能够集成多个软件的功能,同时有代码提示以及纠错等功能,那么将会极大地提升程序员的开发效率,这就是IDE的由来,IDE全称Integrated Development Environment,即集成开发环境,最好的开发Python程序的IDE就是PyCharm。
6.2、PyCharm安装以及使用
具体步骤以及使用方法百度查询即可。
官网地址:https://www.jetbrains.com/pycharm/download 选择Professional专业版安装。
补充知识:
静态语言:
静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。
例如:C、C++、Java、Delphi、C#等。
动态语言:
动态语言是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。
例如PHP、Ruby、Python、SQL、JavaScript、Unix Shell等等。
强类型定义语言:
强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。强类型定义语言是类型安全的语言。
弱类型定义语言:
数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。
两者区别:
强类型语言是一旦变量的类型被确定,就不能变化的语言。
弱类型语言则反之,一个变量的类型是由其应用上下文确定的。
静态语言的优势:
由于类型的强制声明,使得IDE有很强的代码感知能力,故在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中,依托IDE对系统的开发很有保障。
由于静态语言相对比较封闭,使得第三方开发包对代码的侵害性可以降到最低。
动态语言的优势:
思维不受束缚,可以任意发挥,把更多的精力放在产品本身上。
集中思考业务逻辑实现,思考过程即实现过程。
脚本语言:
脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,用来控制软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。
脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。
脚本语言是一种解释型的语言,例如Python,它不象c、c++等可以编译成二进制代码,以可执行文件的形式存在,脚本语言不需要编译,可以直接用,由解释器来负责解释。
综上:
Python是一解释型得强类型动态语言(脚本语言)。