第1章 基本概念
本章摘要
1-1 认识Python
1-2 Python的起源
1-3 Python语言发展史
1-4 Python的应用范围
1-5 静态语言与动态语言
1-6 跨平台的程序语言
1-7 系统的安装与执行
1-8 Python 2与Python 3不相容的验证
1-9 文件的建立、存储、执行与打开
1-10 程序注释
1-11 Python彩蛋
1-1 认识Python
Python是一种直译式(Interpreted Language)、面向对象(Object Oriented Language)的程序语言,它拥有完整的函数库,可以协助用户轻松地完成许多常见的工作。
直译式语言是指,直译器(Interpretor)会将程序代码一句一句直接执行,不需要经过编译(Compile)动作,将语言先转换成机器码,再予以执行。目前Python的直译器是CPython,这是由C语言编写的一个直译程序,与Python一样目前由Python基金会管理使用。
Python也算是一种动态的高级语言,具有垃圾回收(garbage collection)功能。垃圾回收是指程序在执行时,直译程序会主动收回不再需要的动态内存空间,将内存集中管理,这种机制可以减轻程序设计师的负担,当然也就减少了程序设计师犯错的机会。
由于Python开放源码(Open Source),每个人皆可免费使用或为它贡献,除了它本身有许多内建的套件(package)或称模块(module)外,许多公司也为它开发了更多的套件,促使它的功能可以持续扩充,因此Python目前已经是全球最热门的程序语言之一。
1-2 Python的起源
Python的最初设计者是吉多·范罗姆苏(Guido van Rossum),他是荷兰人,1956年出生于荷兰哈勒姆,1982年毕业于阿姆斯特丹大学的数学和计算机系,并获得硕士学位。
吉多·范罗姆苏在1996年为一本O’Reilly出版社作者Mark Lutz所著的Programming Python的序言中表示:6年前,1989年我想在圣诞节期间思考设计一种程序语言打发时间,当时我正在构思一个新的脚本(script)语言的解释器,它是ABC语言的后代,期待这个程序语言对UNIX C的程序语言设计师会有吸引力。基于我是蒙提派森飞行马戏团(Monty Python’s Flying Circus)的疯狂爱好者,所以就以Python为这个程序命名。
在一些Python的文件或有些书封面喜欢用蟒蛇代表Python,但是从吉多·范罗姆苏的上述序言可知,Python灵感的来源是马戏团名称而非蟒蛇。
1999年,他向美国国防高级研究计划局(Defense Advanced Research Projects Agency,DARPA)提出Computer Programming for Everybody的研发经费申请,并提出了下列Python的目标。
(1)这是一个简单直觉式的程序语言,可以和主要程序语言一样强大。
(2)这是开放源码(Open Source)的程序语言,每个人皆可自由使用与贡献。
(3)程序代码像英语一样容易理解与使用。
(4)可在短期间内开发一些常用功能。
现在上述目标都已经实现了,Python已经与C/C++、Java一样成为程序设计师必备的程序语言,然而它却比C/C++和Java更容易学习。
目前,Python语言是由Python软件基金会(www.python.org)管理,有关新版软件下载的相关信息可以在这个基金会取得,可参考附录A。
1-3 Python语言发展史
在1991年Python正式诞生时,当时的操作系统平台是Mac。尽管吉多·范罗姆苏坦言Python是构思于ABC语言,但是ABC语言并没有成功。吉多·范罗姆苏本人认为ABC语言并不是一个开放的程序语言,是其失败的主要原因。因此,在Python的推广中,他避开了这个错误,将Python推向开放式系统,因而获得了巨大的成功。
1. Python 2.0发布
2000年10月16日,Python 2.0正式发布,主要是增加了垃圾回收的功能,同时支持Unicode。
Unicode是一种适合多语系的编码规则,主要是使用可变长度字节方式存储字符,以节省内存空间。例如,对于英文字母而言是使用1字节(byte)空间存储即可,对于含有附加符号的希腊文、拉丁文或阿拉伯文等则用2字节空间存储,中文则是以3字节空间存储,只有极少数的平面辅助文字需要4字节空间存储。也就是说,这种编码规则已经包含全球所有语言的字符了,所以采用这种编码方式设计程序时,其他语系的程序只要支持Unicode编码即可显示。例如,法国人即使使用法文版的程序,也可以正常显示中文。
2. Python 3.0发布
2008年12月3日,Python 3.0正式发布。一般程序语言的发展会考虑到兼容特性,但是Python 3在开发时为了不受先前2.x版本的束缚,因此没有考虑兼容特性,所以许多早期版本开发的程序是无法在Python 3.x版上执行的。
不过为了解决这个问题,尽管发布了Python 3.x版本,后来又陆续将3.x版的特性移植到Python 2.6/2.7x版上,所以现在进入Python基金会网站时,可以发现有2.7x版和3.7x版的软件可以下载。
笔者经验提醒:有一些早期开发的冒险游戏软件只支持Python 2.7x版,目前尚未支持Python 3.7x版。不过相信这些软件未来也将朝向支持Python 3.7x版的路迈进。
Python基金会提醒:Python 2.7x已经被确定为最后一个Python 2.x的版本,目前暂定基金会对此版本的支持到2020年。
笔者在撰写此书时,所有程序都是以Python 3.x版作为主要依据的。
1-4 Python的应用范围
尽管Python是一个非常适合初学者学习的程序语言,在国外有许多儿童程序语言教学也是以Python为工具,然而它却是一个功能强大的程序语言,下列是它的部分应用。
(1)设计动画游戏。
(2)支持图形用户接口(Graphical User Interface, GUI)开发。
(3)数据库开发与设计动态网页。
(4)科学计算与大数据分析。
(5)人工智能与机器学习。
(6)Google、Yahoo!、YouTube、NASA、Dropbox(文件分享服务)、Reddit(社交网站)在内部都大量使用Python作为开发工具。
(7)网络爬虫、黑客攻防。
目前,Google搜索引擎、纽约股票交易所、NASA航天行动的关键任务执行,都是使用Python语言。
1-5 静态语言与动态语言
变量(variable)是一个语言的核心,由变量的设置可以知道这个程序所要完成的工作。
有些程序语言的变量在使用前需要先声明它的数据类型,这样编译程序(compile)会在内存内预留空间给这个变量。这个变量的数据类型经过声明后,未来无法再改变它的数据类型,这类的程序语言称为静态语言(static language),例如,C、C++、Java等。声明变量可以协助计算机捕捉可能的错误,同时也可以让程序执行速度更快,但是程序设计师需要花更多的时间编写程序与思考程序的规划。
有些程序语言的变量在使用前不必声明它的数据类型,这样可以用比较少的程序代码完成更多工作,增加程序设计的便利性,这类程序在执行前不必经过编译(compile)过程,而是使用直译器(interpreter)直接直译(interpret)与执行(execute),这类的程序语言称为动态语言(dynamic language),有时也可称这类语言是文字码语言(scripting language),例如,Python、Perl、Ruby。动态语言执行速度比经过编译后的静态语言执行速度慢,所以有相当长的时间动态语言只适合进行短小程序的设计,或是将它作为准备数据供静态语言处理,在这种状况下也有人将这种动态语言称为胶水码(glue code)。后来随着软件技术的进步,直译器执行速度越来越快,已经可以用它执行复杂的工作了。如果读者懂Java、C、C++,将会发现,Python相较于这些语言除了便利性,程序设计效率已经远远超过这些语言了,这也是Python成为目前最热门程序语言的原因。
使用Python语言时可以直接在提示信息下(>>>)输入程序代码执行工作(可参考1-7节),也可以将程序代码存储成文件然后再执行(可参考1-9节)。
1-6 跨平台的程序语言
Python是一种跨平台的程序语言,主要的操作系统,如Windows、Mac OS、UNIX、Linux等,都可以安装和使用。
跨平台的程序语言意味着,用户可以在某一个平台上使用Python设计一个程序,未来这个程序也可以在其他平台上顺利运行。
1-7 系统的安装与执行
有关安装Python的步骤请参考附录A。下面将以Python 3.7x版为例进行说明。双击附录A中所建的在Windows桌面上的idle图标,将看到下列Python Shell窗口。
图中符号是提示信息,可以在此输入Python指令。
程序实例ch1_1.py:使用print( )函数,输出字符串。
1-8 Python 2与Python 3不相容的验证
下面是早期在Python 2上执行输出字符串的print用法。
如果相同的输出方式应用在Python 3中将出现错误。
出现错误的原因是,在Python 3中print( )已经是一个函数。不过在1-3节中也提过,Python基金会后来陆续将3.x版的特性移植到Python 2.6/2.7x版上,所以如果在Python 2.6/2.7x版本上使用print( )函数,将可以得到正确的输出。
1-9 文件的建立、存储、执行与打开
如果设计一个程序每次均要在Python Shell窗口环境重新输入命令的话,将是一件麻烦的事,所以程序设计时,可以将所设计的程序保存在文件内是一件重要的事。
1-9-1 文件的建立
在Python Shell窗口中可以执行File→New File命令,建立一个空白的Python文件。
然后可以建立一个Untitled窗口,窗口内容是空白,下面是笔者在空白文件内输入一条命令的实例。
如果想要执行上述文件,需要先存储上述文件。
1-9-2 文件的存储
可以执行File→Save As命令存储文件。
然后将看到另存新文件对话框,此例将文件存储在D:/Python/ch1文件夹,文件名是ch1_1(Python的扩展名是py),可以得到下列结果。
单击“保存”按钮。
原标题Untitled已经改为ch1_1.py了。
1-9-3 文件的执行
执行Run→Run Module命令,就可以正式执行先前所建的ch1_1.py文件。
执行后,在原先的Python Shell窗口中可以看到执行结果。
学习到此,恭喜你已经成功地建立了一个Python文件,同时执行成功了。
1-9-4 打开文件
假设已经离开ch1_1.py文件,未来想要打开这个程序文件,可以执行File→Open命令。
然后会出现“打开文件”对话框,选择要打开的文件即可。
1-10 程序注释
程序注释的主要功能是让程序可读性更高,更容易了解。在企业工作中,一个实用的程序可以很轻易超过几千或上万行,此时可能需设计好几个月,给程序加上程序注释,可方便自己或他人了解程序内容。
1-10-1 注释符号#
不论是使用Python Shell直译器或是Python程序文件中,“#”符号右边的文字,都称为程序注释,Python语言的直译器会忽略此符号右边的文字。可参考下列实例。
实例1:在Python Shell窗口注释的应用1,注释可以放在程序语句的右边。
实例2:在Python Shell窗口注释的应用2,注释可以放在程序语句的最左边。
程序实例ch1_2.py:重新设计ch1_1.py,为程序增加注释。
注:Python程序左边是没有行号的,上述行号是笔者为了读者阅读方便加上去的。
1-10-2 三个单引号或双引号
如果要进行大段落的注释,可以用三个单引号或双引号将注释文字包起来。
程序实例ch1_3.py:以三个单引号当作注释。
上述前5行是程序注释。
程序实例ch1_4.py:以三个双引号当作注释。
上述前5行是程序注释。
1-11 Python彩蛋
Python核心程序开发人员在软件内部设计了两个彩蛋,一个是搞笑网站,一个是经典名句又称Python之禅。这是在其他软件中没有见过的,非常有趣。
1. Python之禅
在Python Shell环境下输入“import this”即可看到经典名句,其实这些经典名句也代表着研读Python的意境。
2. Python搞笑网站
可以在Python Shell环境下输入“import antigravity”即可连接下列网址,读者可以欣赏有关Python的趣味内容。
https://xkcd.com/353/
习题
设计程序可以输出下列3行数据。
就读学校
年级
姓名