Python语言由荷兰人Guido van Rossum(吉多·范罗苏姆,见图1-1)于1989年发明,第一个公开发行版本发布于1991年。ABC语言是Python语言的雏形,由荷兰的数学和计算机研究所开发,Guido van Rossum也参与了该语言的设计。但ABC语言可拓展性差,不能直接读写文件,语法上的过度革新导致它不为大多数程序员所接受,因而传播率低。
图1-1 Python创始人
1989年圣诞节期间,在阿姆斯特丹的Guido van Rossum为了打发时间,开发出一种新的脚本程序,作为ABC语言的继承,取名Python。Python这个名字源自Guido van Rossum喜爱的一部电视喜剧 Monty Python ’ s Flying Circus (《蒙迪·派森的飞行马戏团》)。
1989年,Python语言诞生。
1991年,Python语言的第一个版本发布。此时Python已经具有了类、函数、异常处理、包含表和词典在内的核心数据类型,以及以模块为基础的拓展系统。
1991—1994年,Python语言增加了lambda、map、filter和reduce。
1999年,Python语言的Web框架之祖——Zope 1发布。
2000年,Python 2.0发布,加入了内存回收机制,构成了现在Python语言框架的基础。
2004年,Web框架Django诞生。
2006年,Python 2.5发布。
2008年,Python 2.6发布。
2010年,Python 2.7发布。
2008年,Python 3.0发布。
2009年,Python 3.1发布。
2011年,Python 3.2发布。
2012年,Python 3.3发布。
2014年,Python 3.4发布。
2015年,Python 3.5发布。
2016年,Python 3.6发布。
2018年,Python 3.7发布。
2019年,Python 3.8发布。
从2004年以后,Python语言的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为“2010年度语言”。
Python的发展史是一部典型的励志成长史。自1989年诞生以来,从名不见经传到跃居编程语言排行榜前列。2017年,IEEE Spectrum发布的研究报告显示,在2016年排名第三的Python在当年已经成为世界上最受欢迎的语言,而C语言和Java语言分别位居第二位和第三位。
许多程序员都调侃:“人生苦短,我用Python。”的确,Python语言的设计哲学是优雅、明确、简单,它是一门优秀并被广泛使用的语言。除此之外,人工智能、大数据的兴起让Python成为一门更加流行的语言。
截至目前,仍然保留的版本主要基于Python 2.x和Python 3.x。Python 2.x是Python版本系列中非常重要的版本,最早的版本是从2000年开始使用的,特别是从2006年开始,随着Python 2.5的发布,Python的功能逐渐强大起来,并慢慢稳定下来,差不多一到两年左右更新一个版本。Python 3.x在2008年左右开始逐渐流行起来。
Python 3.x的出现其实是为了解决Python 2.x的一些历史遗留问题,如字符串的问题、对Unicode的支持等。由于Python 3.x在设计的时候没有考虑向下兼容,因此基于早期Python版本设计的程序都无法在Python 3.x上正常执行。
基于Python的Web开发框架很多,如耳熟能详的Django,以及Tornado、Flask。其中,Python+Django架构的应用范围非常广泛,其开发速度非常快,学习门槛也很低,能够快速地搭建起可用的Web服务。众多大型网站都是用Python开发的,如Google、Youtube、Drop box、豆瓣网、果壳网等。
Python被广泛地运用于科学和数字计算中,如生物信息学、物理、建筑、地理信息系统、图像可视化分析、生命科学等领域。
Python在人工智能领域内的机器学习、神经网络、深度学习等方面,都是主流的编程语言。目前市面上大部分的人工智能代码,都是使用Python来编写的。其提供了大量机器学习的代码库和框架,如numpy、pandas、scipy、scikit_learn、tensorflow、matplotlib等,这些库和框架也使得Python的优势得以强化,因而使其更适用于人工智能领域。
Python是大数据、云计算领域最火的语言,典型的应用为OpenStack云计算平台。大数据分析中涉及的分布式计算、数据可视化、数据库操作等,在Python中都有成熟的模块可以完成其功能。对于Hadoop-MapReduce和Spark,都可以直接使用Python完成计算。
网络爬虫(Web Crawler)也称网络蜘蛛,是一种按照一定的规则,自动地抓取万维网信息的程序或脚本。网络爬虫通过自动化的程序有针对性地对数据进行采集和处理,是大数据行业获取数据的核心工具。Python是目前主流的能够编写网络爬虫的编程语言,Scrapy是用纯Python实现的,它是一个为了爬取网站数据、提取结构性数据而编写的应用框架。Scrapy架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活地完成各种抓取数据的需求,只要定制开发几个模块就可以轻松地实现一个爬虫,其应用非常广泛。
在网络游戏开发中,Python也有很多应用,相比于Lua和C++,Python有更高级的抽象能力,可以用更少的代码描述游戏业务逻辑。Python非常适合编写1万行以上的项目,而且能够很好地把网游项目的规模控制在10万行代码以内。
Python语言中用于图形用户界面(Graphical User Interface,GUI)开发的界面库有很多,如Kivy、PyQt、gui2py、libavg、wxPython、TkInter等。
在系统运维中,有大量工作需要重复进行,同时还需要做管理系统、监控系统、发布系统等工作,如果将这些工作自动化,将大大提高工作效率。Python是一门综合性的语言,能满足绝大部分自动化运维需求。一般来说,用Python编写的系统管理脚本在可读性、性能、代码重用性、扩展性几方面都优于普通的shell脚本。
Python的优势之一就是代码量少,逻辑一目了然。Python简单易懂、易于读写,开发者可以把更多的注意力放在解决问题本身,不用花费太多时间精力在程序语言、语法上。开发者在学习Python语言之初就可以用少量的代码构建出更多的功能,极其容易上手,它能带给开发者一种快速学会一门语言的体验。
Python是免费、开源的,它可以共享、复制和交换。这也帮助Python形成了充满活力的社区,使它更加完善,技术发展更快。
Python程序无须修改就可以在任何支持Python的平台上运行。由于Python是开源的,因此被许多平台支持。
一个用编译型语言(如C或C++)编写的程序,需要从源文件转换为一个计算机使用的语言。这个过程主要通过编译器完成。当运行程序的时候,系统把程序从硬盘复制到内存中并且运行。而Python是解释型语言,在运行时不需要全部编译成二进制代码,可以直接从源代码解释一句,运行一句。在计算机内部,由Python解释器把源代码转换成字节码的中间形式,再把它翻译成机器语言并运行。
Python从设计之初就是一门面向对象的语言,对于Python来说“一切皆为对象”。如今面向对象是非常流行的编程方式,Python支持面向过程编程、面向对象编程、函数式编程。
Python拥有一个强大的标准库,其提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等拓展功能。
Python的可扩展性体现为它的模块。Python语言具有脚本语言中最丰富和强大的类库,这些类库覆盖了文件I/O、GUI、网络编程、数据库访问、文本操作等绝大部分应用场景。
Python的可扩展性一个最好的体现是,当需要一段关键代码运行得更快时,可以将其用C或C++语言编写,然后在Python程序中调用它们即可。
Python与其他语言最大的区别就是,其代码块不使用大括号{ }来控制类、函数以及其他逻辑判断。Python语言是“靠缩进控制代码逻辑的语言”,因此必须注意严格缩进,统一的编码规范可以提高程序的开发效率。
Python语言又称胶水语言,它提供了丰富的API和工具,以便开发者能够轻松地使用包括C、C++等主流编程语言编写的模块来扩充程序。就像使用胶水一样把用其他编程语言编写的模块黏合起来,Python让整个程序同时兼具其他语言的优点,起到了黏合剂的作用。
Python语言是“靠缩进控制代码逻辑的语言”,因此必须注意严格缩进。在编写代码时,4个空格表示一个缩进层次(PyCharm可自动缩进),注意不要使用〈Tab〉键,更不能将〈Tab〉键和空格键混用。
和C、Java语言不同,Python中在行尾不使用分号作为分隔,同时也不使用分号将两条语句放在同一行。Python程序代码的每行最好不要超过80个字符,如果超过,可使用小括号将多行内容隐式地连接起来,而不推荐使用反斜杠\进行连接。
在实际的编程中遵循良好的编码风格,可以有效地提高代码的可读性,降低出错概率和维护的难度。同时,使用统一的编码风格,还可以降低沟通成本。
计算机不能直接理解任何除机器语言以外的语言,所以必须把程序员所用的程序语言翻译成机器语言,计算机才能执行程序。翻译的方式有两种,一种是编译,另一种是解释,如图1-2所示。编译型语言在程序执行之前,会先通过编译器对源代码统一进行编译,生成一个可执行的文件,然后一次性执行。编译型语言执行速度快,其最典型的例子就是C语言。但在Windows平台下生成的可执行文件只能在Windows平台下执行,导致编译型语言的跨平台性差,可移植性不好。解释型语言通常不用对源代码进行统一编译,它是在程序运行的时候,通过解释器对程序进行逐行解释,解释一句,运行一句,其最典型的例子是JavaScript。
图1-2 翻译过程
Python属于解释型语言。Python自带的解释器为CPython,是一个用C语言编写的Python解释器,包含在Python安装程序中。
Python解释器首先将源代码编译生成中间字节码,一般情况下,如果源文件被导入,则将中间字节码保存为扩展名为.pyc的文件。然后将编译好的字节码转发到Python虚拟机(Python Virtual Machine,PVM)中加以执行。Python解释器解释一句,代码执行一句,因此Python程序的执行速度相比编译型语言略慢,但是其跨平台性好。Python程序在不同的操作系统平台上运行时,只需要在不同的平台上安装不同的解释器,程序就可以执行。