01 Python 语言简介及其应用领域
1. Python 是一种易学易用、功能强大的高级程序设计语言
1.1 Python 是什么
Python 是一种高级程序设计语言,用接近人类语言的方式描述计算的过程。例如,计算" 1 加 2"的结果并将结果打印输出,使用 Python 完成这项功能,编写的 Python 程序内容如下:
print(1 + 2)
这个 Python 程序首先计算 1 + 2,然后使用 print 的功能将 1 + 2 的结果输出到屏幕,输出结果为:
3
从这个程序可以直观的感受到 Python 的简单易学,即使没有编程基础,也能看懂和理解这段程序。
1.2 Python 的特色和优点
- 入门简单,对初学者友好
在介绍 Python 语言时,通常会提到 Python 是一门易学的编程语言,易学是 Python 最鲜明的特色。相对于 C、C++、Java 等编程语言,Python 的易学体现在它的学习曲线非常的平缓,如果学习曲线如果太陡峭,显然不适合一般人去学习掌握,大部分人没入门就放弃了。
今年 11 月15 日,年过半百的 SOHO 中国董事长潘石屹在微博上宣布,正式开始学习Python,占据了热搜榜,表明了 Python 语言的简单易学已经深入人心。
- 高级语言,不用考虑底层硬件细节
程序设计语言被分类为高级语言和低级语言:使用低级语言编写程序时,程序员需要考虑底层硬件细节,例如:手工的分配和释放内存,程序编写时繁琐易错;而使用高级语言编写程序时,高级语言会自动的处理底层硬件细节,例如:自动的释放不再使用的内存,程序员不用考虑底层硬件细节,专注于解决问题本身。
Python 是一种典型的高级语言,向程序员屏蔽了底层硬件细节。例如,Python 程序既可以在 x86 处理器上运行,也可以在 arm 处理器上运行,程序员不需要了解 x86 处理器和 arm 处理器的指令,就可以完成计算"1 加 2"这样的任务。
- 语法简洁直观
Python 语法接近自然语言,提供了很多简洁、直观和易于理解的表达方式,非常适用来描述求解问题的逻辑。实现相同程序功能时,Python 语言的代码行数仅相当于其他语言的 1/5 至 1/10。更少的代码行数、更简洁的表达方式可减少程序错误以及缩短开发周期。
- 强大的标准库和第三方库
Python 语言可以将复杂的功能封装为模块(又称为库),将功能实现的细节隐藏起来,使用该模块(库)的程序员不需要了解实现的细节。通过调用模块封装好的功能,可以用仅仅几行 Python 代码实现某项复杂的功能,例如可以用一行代码就实现一个 Web 服务器。
在 Python 的应用领域中,如:web 开发、人工智能、网络爬虫、数据分析等领域,已经存在了大量的模块,程序使用这些模块就可以轻松开发出应用程序。
Python 的标准库是随着 Pyhon 安装的时候默认自带的库,提供了有文本处理、系统管理、网络处理等功能。Python 的第三方库,是由各家厂商和 Python 爱好者开发的库,第三方库需要下载后安装到 Python 的安装目录下。强大的标准库和第三方库,让 Python 程序员能够轻松实现各种复杂的功能。
1.3 Python 的缺点
和 C、C++ 等编程语言相比,Python 程序的运行性能很差,这是 Python 语言最主要的缺点。例如,编写一个以数学计算为主的程序,完成相同功能的 Python 程序的运行性能只有 C 程序的千分之一左右。
在实际的应用场景中,Python 的缺点并不会成为系统的瓶颈,原因如下:
在应用领域中,程序运行时大部分时间进行的是 IO 处理,少部分时间进行数学计算。
在 Web 后端开发中,Python 程序接受来自网络的请求,处理请求时读写数据库,最后将处理结果通过网络返回,大量的时间花费在网络 IO 和数据库 IO 上,因此 Python 的数学运算性能对程序的整体影响不大。
发挥 C 语言和 Python 语言两者各自的优势,使用 C 语言完成对计算性能要求高的功能,使用 Python 语言封装 C 语言实现的功能模块。
Python 的 NumPy (Numerical Python) 库,是一个针对矩阵运算的数学函数库,该库由 Python 语言和 C 语言混合开发而成:底层的数学运算功能由 C 语言实现,面向用户的接口使用 Python 语言实现。用户使用 Python 语言调用底层的 C 语言模块,从而兼顾了开发效率和运行效率。
2. Python 的历史和现状
2.1 Python 的历史
Python 的创始人为荷兰人 Guido van Rossum。1982年,Guido 从阿姆斯特丹大学(University of Amsterdam)获得了数学和计算机硕士学位。
Python 的创始人 Guido van Rossum在80年代,个人电脑的配置很低,比如早期的 Macintosh,只有 8MHz 的 CPU 主频和 128KB 的 RAM。为了增进程序的运行效率,程序语言也迫使程序员像计算机一样思考,以便能写出充分利用计算机性能的程序。
Guido 使用 C 语言的过程中,感受到 C 语言的开发效率很低,需要耗费大量的时间编写 C 程序。他的另一个选择是 Shell。 Shell 是 UNIX 操作系统提供的脚本语言。UNIX 的管理员常常用 Shell 去写一些简单的脚本,以进行一些系统维护的工作,比如定期备份。Shell 可以像胶水一样,将 UNIX 下的许多功能连接在一起。许多 C 语言下上百行的程序,在 Shell 下只用几行就可以完成。
Shell 的本质是调用命令来完成复杂的功能,它缺乏编程语言的若干重要特性。例如,Shell 缺乏复杂的数据结构:列表、字典、结构体,因此不适用于实现复杂的功能。Guido 希望有一种语言,这种语言能够像 C 语言那样,具备完整的编程语言特性,又可以像 Shell 那样,具有很高的开发效率。
1989 年圣诞节期间,在阿姆斯特丹,Guido 为了打发圣诞节的无趣,决心开发一个新的程序语言 Python。Guido 将 Python(大蟒蛇)作为该编程语言的名字,是取自英国 20 世纪 70 年代首播的电视喜剧《蒙提.派森的飞行马戏团》(Monty Python’s Flying Circus),因此 Python 语言的 logo 是一条蟒蛇。
Python 语言的 logo1991 年,第一个 Python 解释器诞生,它是用 C 语言实现的,又被称为 CPython。Python 从一开始就具有良好的可扩展性,可以用 C 语言编写模块,在 Python 程序中使用这些使用 C 语言开发的模块。
1999 年,Guido 向 DARPA 提交了一条名为 “Computer Programming for Everybody” 的资金申请,并在后来说明了他对 Python 的目标:
- 一门简单直观的语言并与主要竞争者一样强大
- 开源,以便任何人都可以为它做贡献
- 代码像纯英语那样容易理解
- 适用于短期开发的日常任务
这些想法中的基本都已经成为现实,Python 已经成为一门流行的编程语言。
2.2 Python 2 和 Python 3
Python 有两个主要的版本: Python 2 与 Python 3。Python 3 相对于 Python 2 是一个重大的升级,Python 3 与 Python 2 两者的语法不兼容。最近这几年 Python 3 的使用率急剧上升,Python 2 将逐步退出舞台。因此,学习 Python 应该选择 Python 3。
2.3 Python 的现状
Python 自 1989 年诞生以来,经历了 30 年的发展,已经成为流行的编程语言之一。TIOBE 编程语言排行榜根据互联网上程序员、教程和第三方厂商的数量,并使用搜索引擎统计出编程语言的排名数据,反映了某个编程语言的热门程度。下图为 2019 年 12 月份的 TIOBE 编程语言排行榜。TIOBE 编程语言排行榜表明 Python 语言的热门程度已经成为仅次于 Java 语言 和 C 语言。
2019 年 12 月的 TIOBE 编程语言的排行榜2017 年 10 月,教育部考试中心发布《关于全国计算机等级考试体系调整的通知》,新增 Python 语言程序设计科目。2018 年 9 月,举行了首考。Python 编程语言作为一种国家标准进入了中国的考试认证体系,这是一个里程碑性质的事件,意味着 Python 语言在国内教育领域得到官方的正式认同,在部分高校,Python 程序设计已经成为一门必修课程。无论是计算机专业的院系还是非计算机专业的院系,开设 Python 程序设计课程,已经成为一种趋势。
Python 已经成为全国计算机等级考试二级科目Python 在国内工业界得到了广泛的应用和认可,并且Python 的人才易于培养和招聘,国内的互联网的领头企业提供了大量的和 Python 的工作岗位,下图为腾讯发布的 Python 的工作岗位。
腾讯招聘的 Python 工作岗位3. Python 的应用领域
3.1 教学
Python 可以作为《程序设计语言》课程的教学语言,在教学领域得到了国际和国内知名高高校认可。以世界著名的麻省理工学院 (MIT)为例,《计算机科学及编程导论》在 MIT 的课程编号是 6.00.1,是 MIT 计算机科学及工程学院的经典课程。之前,课程一直使用 Scheme 作为教学语言,不过由于 Python 简单、易学等原因,近年来已经改用 Python 作为教学语言了。
3.2 后端开发
在 Web 应用中,用户通过浏览器向服务器提交请求,服务器接收到请求后,对用户的请求进行处理,再将结果返回给用户。例如,使用 baidu 搜索引擎的过程如下:
- 用户在 baidu 的搜索框中,输入关键字 “手机”,浏览器将关键字 “手机” 发送到 baidu 的服务器。
- baidu 服务器收到查询手机的请求,在数据库查找和手机相关的网页,按照与关键词的相关性进行排序,再将排序结果发送给用户。
- 浏览器收到服务器的查询结果后,显示与 “手机” 相关的网页列表。
在以上的 3 个步骤中,与用户交互的部分称之为前端,在服务器处理的用户请求的部分称为后端。Python 提供了大量的模块和框架可以用于后端开发。有很多知名的网站后端采用了 Python,例如,国内的豆瓣就是一个应用Python打造的非常成功的 Web 2.0 站点。
3.3 网络爬虫
网络爬虫,又被称为网页蜘蛛、网络机器人,是一种按照一定的规则,自动地抓取网页的程序。网络爬虫把网站的网页下载到在本地,然后对下载的网页进行关键字提取和数据分析。例如,baidu 搜索引擎使用到大量的网络爬虫,过程如下:
- 选择站点作为爬虫的目标。
- 按照一定的策略,抓取该站点的网页。
- 对下载的网页进行关键字提取,建立索引。
Python 提供了大量的模块和框架可以用于网络爬虫。例如,Python 提供了 requests 模块根据指定的 url 抓取网页。Python 同时提供了网络爬虫框架,例如 Scrapy,基于 Scapy 框架开发可以快速实现抓取 web 站点并从页面中提取结构化的数据。
3.4 自动化运维
一个互联网产品的生成一般经历的过程是:需求分析、研发部门开发、测试部门测试、运维部门部署发布以及长期的运行维护。运行维护的日程主要工作包括服务部署、服务监控等。运维的工作繁琐重复,即使最谨慎的人,也会犯错,尤其是面对着重复性工作。通过运维自动化工具来完成这样的工作,错误率将大大降低。
Python 提供了各种自动化运维工具,能满足绝大部分自动化运维的需求,包括:
- 服务部署工具,当应用较为简单时,只需要在少量服务器上部署少量的服务,可以采用人工操作;当应用较复杂,需要在大量服务器上部署大量的服务,采用服务部署工具可以一键实现在多台服务器上自动化部署多项服务。
- 服务监控工具,对服务运行的状态进行实时的监控,随时发现服务的运行异常和资源消耗情况;对服务出现的任何异常进行及时处理,尽可能避免问题的扩大化甚至中止服务。
3.5 自动化测试
自动化测试,顾名思义是指自动完成测试工作。通过工具模拟人工的操作过程,并验证其结果,这样的测试过程,就是是自动化测试。自动化测试节约了批人力成本,让机器执行大量的重复繁琐的劳动。
Python 提供了众多的自动化测试框架,可以实现:
- 单元测试:简化单元测试的编写。
- 对 GUI 程序的自动化测试:Python 提供了模拟鼠标的单击和移动、键盘输入等功能,模拟用户操作 GUI 程序。
- Web 自动化测试:Python 提供了模拟鼠标的单击和移动、键盘输入等功能,模拟用户操作浏览器。
- 性能测试:使用代码模拟大批量用户,让用户并发请求,统计系统负载能力并生成报告。
3.6 数据分析
数据分析是指对数据搜集、整理、分析,并依据数据做出评估和预测。现在是一个依靠数据竞争的时代,世界 500 强企业中,有 90% 以上都建立了数据分析部门。IBM、微软、Google 等知名公司都积极投资数据业务,建立数据部门,培养数据分析团队。
Python 提供了和数据分析相关的模块,典型的包括:
- numpy,用于数学计算,如矩阵计算。
- pandas,基于 numpy 数据分析工具,提供了大量能使我们快速便捷地处理数据的函数和方法。
- matplotlib:用于数据结果的可视化,将数据展现为散点图、折线图、直方图、柱状图、饼图等直观的形式。
3.7 人工智能
人工智能(Artificial Intelligence),英文缩写为 AI,它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能的研究目标是使计算机能够胜任一些通常需要人类智能才能完成的复杂工作,例如:
- 无人驾驶,通过车载传感系统感知道路环境、自动规划行车路线并控制车辆到达预定目标。
- 机器翻译,将一种自然语言(例如英文)转换为另一种自然语言(例如中文)。
- 语音合成,将文字信息转变为可以听得懂的、流利的人造语音。
Python 提供了相关的库用于快速开发人工智能的应用,用户使用 Python 的 AI 库时,不需要深入了人工智能算法的细节,极大的降低了人工智能开发的门槛。
TensorFlow 是一个机器学习框架,其前身是谷歌的神经网络算法库,在计算机视觉、语音处理、推荐系统和自然语言处理等场景下有着丰富的应用,是目前最热门的机器学习框架。TensorFlow 提供了 Python、C/C++、Java 等多种编程语言的接口,但是基于 Python 编程接口的 TensorFlow 框架进行开发是最常见的选择。
Python 语言的语法简洁、表达能力强,能简单快速聚焦问题本身而不是繁琐底层细节,成为了人工智能编程首选的编程语言。
4. 用 Python 开发的著名项目
4.1 阿里云 AI 开放平台
阿里云 AI (https://ai.aliyun.com) 致力于构建最全面、最开放、最前沿的AI开放平台,从 2015 年开始,阿里云推出 AI 产品,包括语音识别,还有图像识别、视觉识别等 130 多款细分产品,适用于 300 多个场景。
阿里云的 AI 解决方案阿里云提供了提供最易用的 API、SDK 等开发组件,助力企业快速高效的实现产品升级。对每项产品提供多种编程接口,包括:Python、Java、C++、ios、Android、Restful 等。以语音合成为例,阿里云 AI 的语音合成 Python SDK 提供了如下接口:
- SpeechSynthesizer,设置语音合成请求参数,发送语音合成请求。
- SpeechSynthesizerCallback,用于获取语音合成结果。
4.2 豆瓣网
豆瓣网 (douban) 是一个社区网站,提供关于书籍、电影、音乐等作品的信息,还提供书影音推荐、线下同城活动、小组话题交流等多种服务功能。豆瓣网已经达拥有 300 万注册用户,访问量每天则超过两千万,是一个应用 Python 开发的非常成功的 Web 2.0 站点。
豆瓣网的后端采用了 Quixote 框架,Quixote 框架是一个使用 Python 开发的轻量级 Web 框架。
4.3 IDLE
Idle 是一个使用 Python 开发的集成开发环境 IDE。Idle 由 Python 官方开发和维护,在 Windows 操作系统中,安装 Python 时会同时安装 Idle。IDLE 提供了一个功能强大的调试器,它还提供了一个多窗口文本编辑器,具有许多功能,包括多个撤消,Python 着色,智能缩进,调用提示,自动完成等。
Python 内置的 IDE4.4 Face Recognition
Face Recognition 是一个基于 Python 的人脸识别库,它还提供了一个命令行工具,让你通过命令行对任意文件夹中的图像进行人脸识别操作。该库使用顶尖的深度学习人脸识别技术构建,在脸部检测数据库上的检测准确率高达 99.38%。Face Recognition 的最基本功能是从图像中识别人脸,如下图所示。
从图像中识别人脸5. 小结
经过这个小节的学习,我们应该已经大致知道了 Python 到底是个什么样的编程语言。现如今,Python 可以说在各个编程领域大放异彩,很多公司也已经开始大量招聘 Python 人才,所以你是很有必要学习 Python 的。后面的小节中我会一一把 Python 的各种魅力呈现给大家,快来一起愉快的学习吧。