![Python数据科学零基础一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/273/31904273/b_31904273.jpg)
第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年毕业于阿姆斯特丹大学的数学和计算机系,并获得硕士学位。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P14_15218.jpg?sign=1739250031-uqPT5FiEMpcrBue5smu3IsvkBxiJUW3M-0-360563bf6b745bcfaf1bb0ee99b8ec0b)
吉多·范罗姆苏在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窗口。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P17_16134.jpg?sign=1739250031-vnR2M2FzIjVVEOPzTMPvHl7f3Usg1e8I-0-0b5e462820d17934ea64e4aaf634a8f3)
图中符号是提示信息,可以在此输入Python指令。
程序实例ch1_1.py:使用print( )函数,输出字符串。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P17_16140.jpg?sign=1739250031-nXEf9mBOJvuWXBmg03HA2Ix7a7xTmx6w-0-2058d479b7d7e053ba5ac147dc1fb41e)
1-8 Python 2与Python 3不相容的验证
下面是早期在Python 2上执行输出字符串的print用法。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P18_16629.jpg?sign=1739250031-eyWnfRMQrcshWS8ShCT27oYsa3aa21PT-0-e9accd6829653d4a04283ebfa5244a23)
如果相同的输出方式应用在Python 3中将出现错误。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P18_16632.jpg?sign=1739250031-vMhCo7kFKAU2cYzQtzlMjnxFQqXSxVoV-0-9ee428e84b8e7560176cf7ba03ffa3ac)
出现错误的原因是,在Python 3中print( )已经是一个函数。不过在1-3节中也提过,Python基金会后来陆续将3.x版的特性移植到Python 2.6/2.7x版上,所以如果在Python 2.6/2.7x版本上使用print( )函数,将可以得到正确的输出。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P18_16635.jpg?sign=1739250031-xoR2Cv3Q5w0hWN9zGSyTH57Yh2JcBQpi-0-10d9feb952886b896a7b5d76192ce436)
1-9 文件的建立、存储、执行与打开
如果设计一个程序每次均要在Python Shell窗口环境重新输入命令的话,将是一件麻烦的事,所以程序设计时,可以将所设计的程序保存在文件内是一件重要的事。
1-9-1 文件的建立
在Python Shell窗口中可以执行File→New File命令,建立一个空白的Python文件。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P18_16641.jpg?sign=1739250031-zfiHsQFr69pSGtfMOwPZ10YmBZskNOrY-0-43c24724b44f88d39351a30126f3b550)
然后可以建立一个Untitled窗口,窗口内容是空白,下面是笔者在空白文件内输入一条命令的实例。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P19_17082.jpg?sign=1739250031-gGST6YWG3sNwatfcwQ2qRobXN2zhklUK-0-33b4b2287eb5d5ee5539badd93252c8d)
如果想要执行上述文件,需要先存储上述文件。
1-9-2 文件的存储
可以执行File→Save As命令存储文件。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P19_17087.jpg?sign=1739250031-3OKmjpFxKmTDrVJDW7gQUn8AqieaNKlq-0-897316eb7bfe8ebbb251d2122b17fc64)
然后将看到另存新文件对话框,此例将文件存储在D:/Python/ch1文件夹,文件名是ch1_1(Python的扩展名是py),可以得到下列结果。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P19_17090.jpg?sign=1739250031-R89FEq8hxQ0FemOUb3KJTEcmG66pMtlR-0-28282fdb7df1ecc28c09b5bb77ea242b)
单击“保存”按钮。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P19_17093.jpg?sign=1739250031-Xui3ocDFJsT4JrwHyeTXz5FZznarcPmI-0-9f012814e1f40ee85bede31c2defc49d)
原标题Untitled已经改为ch1_1.py了。
1-9-3 文件的执行
执行Run→Run Module命令,就可以正式执行先前所建的ch1_1.py文件。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P20_17525.jpg?sign=1739250031-2dqOZOjSxpYNcKespArD44Bmc7MUVE1O-0-fb7ea8b102c2d668ed08dc99835d6733)
执行后,在原先的Python Shell窗口中可以看到执行结果。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P20_17528.jpg?sign=1739250031-IVwW90AVS8um9qqRurKay2DRHWJiTYID-0-69dee0a26abf63ef92b959fd7a77045d)
学习到此,恭喜你已经成功地建立了一个Python文件,同时执行成功了。
1-9-4 打开文件
假设已经离开ch1_1.py文件,未来想要打开这个程序文件,可以执行File→Open命令。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P20_17533.jpg?sign=1739250031-0K2UVy4z1l4JptpqjwkJLljDezLhZnub-0-89496b5c90ccab74d541afad2399539e)
然后会出现“打开文件”对话框,选择要打开的文件即可。
1-10 程序注释
程序注释的主要功能是让程序可读性更高,更容易了解。在企业工作中,一个实用的程序可以很轻易超过几千或上万行,此时可能需设计好几个月,给程序加上程序注释,可方便自己或他人了解程序内容。
1-10-1 注释符号#
不论是使用Python Shell直译器或是Python程序文件中,“#”符号右边的文字,都称为程序注释,Python语言的直译器会忽略此符号右边的文字。可参考下列实例。
实例1:在Python Shell窗口注释的应用1,注释可以放在程序语句的右边。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P20_17540.jpg?sign=1739250031-O1klgrDJF04i1KXDhyjreADmPZYs1i0p-0-3c957d3f556dd5f62175735f4c2d2ae5)
实例2:在Python Shell窗口注释的应用2,注释可以放在程序语句的最左边。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P21_17994.jpg?sign=1739250031-4HCsar1tRQ9hweVSGNMHwQJsX72E14kA-0-301d2b7ef1ac69182e5a69a60bb543be)
程序实例ch1_2.py:重新设计ch1_1.py,为程序增加注释。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P21_17997.jpg?sign=1739250031-4JHyE3IYCG89uPCOqBPvphfffQAdJpwZ-0-50f20510e9dffd130938e80e363e1048)
注:Python程序左边是没有行号的,上述行号是笔者为了读者阅读方便加上去的。
1-10-2 三个单引号或双引号
如果要进行大段落的注释,可以用三个单引号或双引号将注释文字包起来。
程序实例ch1_3.py:以三个单引号当作注释。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P21_18002.jpg?sign=1739250031-xcusybKsu3LADkUSD3Ma4E5HrLJ3OCiJ-0-334ea1b79604ceaa9bf5c5cfc361f61d)
上述前5行是程序注释。
程序实例ch1_4.py:以三个双引号当作注释。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P21_18005.jpg?sign=1739250031-2ayV6uVRNzPyjMll4zvkBeW4LfJlIdxP-0-446c6c33e84d6d3952042f0515e78d22)
上述前5行是程序注释。
1-11 Python彩蛋
Python核心程序开发人员在软件内部设计了两个彩蛋,一个是搞笑网站,一个是经典名句又称Python之禅。这是在其他软件中没有见过的,非常有趣。
1. Python之禅
在Python Shell环境下输入“import this”即可看到经典名句,其实这些经典名句也代表着研读Python的意境。
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P22_18455.jpg?sign=1739250031-joAm5iHyEBiJukv8prdYlNS6QpdjcR7g-0-e1edcbe4287becfaad1394eec7c99471)
2. Python搞笑网站
可以在Python Shell环境下输入“import antigravity”即可连接下列网址,读者可以欣赏有关Python的趣味内容。
https://xkcd.com/353/
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P22_18458.jpg?sign=1739250031-uxg6yq6qR4Cs5RXIAr9sGIDaO2EFrCzg-0-0613ed25f5b6b0502412e029c6259b65)
习题
设计程序可以输出下列3行数据。
就读学校
年级
姓名
![](https://epubservercos.yuewen.com/371221/17274856804199906/epubprivate/OEBPS/Images/Figure-P22_18462.jpg?sign=1739250031-QFA4uitZE8eJEa844trpmULPsGXG4g2I-0-fc64169b8c48d45495a109e8bcd8cf22)