一切都始于1989年的那个圣诞节,Python的诞生并不算恰逢其时,它崛起充满了机遇巧合,也有其必然性。三十年间,Python技术不断更迭,生态逐渐完善,加上互联网、大数据、以及人工智能这一波波浪潮的推波助澜,Python渐渐从小众最终站上了现在的高度。
1. 关于Python
Python 是少数的几种既 简单又强大 的语言之一。你会惊喜地发现,将精力集中于问题的解决方案,而不是编程语言的语法和结构,是多么的容易!
Python 的官方介绍是:
Python 是一个易于学习、功能强大的编程语言。它拥有高效高级的数据结构和一种简单有效的面向对象编程的编程方法。Python 优雅的语法、动态类型及其解释性,使其成为一个大多数平台上许多领域中脚本编写和快速应用程序开发的理想语言。
2. 名字背后的故事
Python的创始人为吉多·范罗苏姆(Guido van Rossum),人称龟叔。
1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和Shell之间,功能全面,易学易用,可拓展的语言。
3. Python流行度
现在,全世界差不多有600多种编程语言,但流行的编程语言也就那么20来种。如果你听说过TIOBE排行榜,你就能知道编程语言的大致流行程度。这是最近20年最常用的10种编程语言的变化图:
4. Python的特点
简单
Python 是一个极简语言。读一个好的 Python 程序就像是在读英语,虽然英语很严格! Python 的这种伪代码特性是它最大的优点之一。它能够让你专注于问题的解决方法,而不是语言本身。
易于学习
如你所见,Python 非常容易上手。正如前面所提到的,Python 具有非常简单的语法。
免费开源
Python 是一个 FLOSS (Free/Libré and Open Source Software 免费 / 自由和开源的软件) 的例子。简单来讲,你可以自由发布软件的副本,阅读它的源代码,对其进行修改,并且在新的免费程序中使用它的部分内容。FLOSS 基于共享知识社区的概念。这也是 Python 为什么如此优秀的原因之一 —— 它已经被创造出来,并且被一个只想看到更好的 Python 的社区不断改进。
高级语言
当你使用 Python 编写程序时,你永远不需要考虑低级细节,诸如管理程序使用的内存等。
可移植
由于它的开源特性,Python 已经被移植(即,为了使它能够正常工作而修改)到许多平台上。如果你足够小心地避免任何系统相关的特征,那么你所有的 Python 程序在任意一个平台上都能正常工作,而不需要做任何的修改。
解释性(和编译性相对)
这需要一些解释。
用 C 或 C++ 等编译语言编写的程序,通过使用带有各种标志和选项的编译器,从 C 或 C++ 的源语言转换为计算机所使用的语言(二进制代码,即 0 和 1)。当你运行程序时,链接器 / 加载器软件把程序从硬盘复制到内存中并开始运行。
另一方面,Python 不需要编译成二进制。你可以直接从源代码 运行 程序。在内部,Python 会转换成一种被称为字节码的中间形式,然后将字节码转换成你的计算机的机器语言,然后运行它。 实际上,所有的这些操作使得 Python 更加易于使用,因为你不必去担心如何编译程序,也不必担心如何确保合适的库已经被连接和被加载等等。这也让你的 Python 程序更加具有移植性,因为你可以把你的程序复制到另一台计算机上,它依然可以正常工作!
面向对象
Python 既支持面向过程的编程又支持面向对象的编程。在 面向过程 的语言中,程序围绕着过程或者函数构建。在 面向对象 的语言中,程序围绕结合数据和方法的对象构建。Python 有一种非常强大又极其简单的 OOP 方法,特别是与 C++ 或者 Java 等大型语言相比而言。
可扩展
如果你需要一个关键的代码段使你的程序运行的更快,或者你不想公开某段算法,那么你可以使用 C 或者 C++ 编写程序的这一段代码,然后从 Python 程序中使用它。
可嵌入
你可以将 Python 嵌入到你的 C/C++ 程序中,为程序的用户提供 脚本 功能。
丰富的库
Python 标准库确实非常大。它能帮你做各种各样的事情,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV 文件、加密、GUI(图形用户界面)以及其它系统相关的东西。记住,只要安装了 Python ,所有的这些都可以使用。这就是所谓的 Python 的 内置电池 哲学。
除了标准库以外,你还可以在 Python 包索引 中找到其它各种高质量的库。
5. 主要应用领域
Python 的应用领域非常广泛,几乎所有大中型互联网企业都在使用 Python 完成各种各样的任务,例如国外的 Google、Youtube、Dropbox,国内的百度、新浪、搜狐、腾讯、阿里、网易、淘宝、知乎、豆瓣、汽车之家、美团等等。
概括起来,Python 的应用领域主要有如下几个:
- WEB开发:Python拥有很多免费数据函数库、免费web网页模板系统、以及与web服务器进行交互的库,可以实现web开发,搭建web框架,目前比较有名气的Python web框架为Django。从事该领域应从数据、组件、安全等多领域进行学习,从底层了解其工作原理并可驾驭任何业内主流的Web框架。
- 桌面软件:Python在图形界面开发上很强大,可以用tkinter/PyQT框架开发各种桌面软件。
- 网络编程:网络编程是Python学习的另一方向,网络编程在生活和开发中无处不在,哪里有通讯就有网络,它可以称为是一切开发的“基石”。对于所有编程开发人员必须要知其然并知其所以然,所以网络部分将从协议、封包、解包等底层进行深入剖析。
- 爬虫开发:在爬虫领域,Python几乎是霸主地位,将网络一切数据作为资源,通过自动化程序进行有针对性的数据采集以及处理。从事该领域应学习爬虫策略、高性能异步IO、分布式爬虫等,并针对Scrapy框架源码进行深入剖析,从而理解其原理并实现自定义爬虫框架。
- 云计算开发:Python是从事云计算工作需要掌握的一门编程语言,目前很火的云计算框架OpenStack就是由Python开发的,如果想要深入学习并进行二次开发,就需要具备Python的技能。
- 人工智能:MASA和Google早期大量使用Python,为Python积累了丰富的科学运算库,当AI时代来临后,Python从众多编程语言中脱颖而出,各种人工智能算法都基于Python编写,尤其PyTorch之后,Python作为AI时代头牌语言的位置基本确定。
- 自动化运维:Python是一门综合性的语言,能满足绝大部分自动化运维需求,前端和后端都可以做,从事该领域,应从设计层面、框架选择、灵活性、扩展性、故障处理、以及如何优化等层面进行学习。
- 金融分析:金融分析包含金融知识和Python相关模块的学习,学习内容囊括Numpy\Pandas\Scipy数据分析模块等,以及常见金融分析策略如“双均线”、“周规则交易”、“羊驼策略”、“Dual Thrust 交易策略”等。
- 科学运算:Python是一门很适合做科学计算的编程语言,97年开始,NASA就大量使用Python进行各种复杂的科学运算,随着NumPy、SciPy、Matplotlib、Enthought librarys等众多程序库的开发,使得Python越来越适合做科学计算、绘制高质量的2D和3D图像。
- 游戏开发:在网络游戏开发中,Python也有很多应用,相比于Lua or C++,Python比Lua有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,Python非常适合编写1万行以上的项目,而且能够很好的把网游项目的规模控制在10万行代码以内。
根据Python的应用场景,衍生就业方向概括起来有如下几个:
- Linux 运维
- Python Web 网站工程师
- Python自动化测试
- 数据分析
- 人工智能
6. Python的未来发展
在Python发展过程中,Guido一直是核心人物,甚至被称为“终身仁慈独裁者”,但在2018年经历了退出管理层风波之后,他又在2019年以五大指导委员之一的身份重回决策层。这为Python迎来了新的治理方案:指导委员会模式。这种模式意味着Python的未来将从Guido一人决定变为5人决定,虽然比很多开源语言仍然有民主化空间(例如PHP的改进由社区投票决定),但也算是一种从专制到民主的进步。
有关Python的每个提升计划,都是在PEP(Python Enhancement Proposal)列表中——每个版本新特性和变化都通过PEP提案经过社区决策层讨论、投票决议,最终才有我们看到的功能。
目前,Python的最新稳定的主版本是3.7,Python 3.8也已经有了预览版,大概在2023年左右Python 4便会问世。在之后的时间里,Python会如何发展?我们可以从Python软件基金会的董事会成员、CPython的核心开发人员Nick Coghlan的信息中略知一二:
首先,Python的PEP流程和制度没有任何变化,通过增加新模块和功能来增强的基础能力。随着Python 2在2020年不再维护,社区在Python 3的资源和投入会相应增加。
其次,不同解释器的实现和功能扩展还将继续增强,方向包括PyPy关于JIT编译器生成和软件事务内存的尝试,以及科学和数据分析社区,对面向数组编程的探索等。
再次,嵌入式应用的增强,核心是与其他虚拟机运行时(如JVM和CLR)的集成和改进,尤其是在教育领域取得的进展,可能会让Python作为更受欢迎的嵌入式脚本语言,在更大的应用程序中运行。
最后,对于为了兼容和维持Python 2的部分功能而存在于Python 3中的原有代码,在后续版本中应该会逐步优化甚至去掉。而对于其他更改,则会根据情况弃用、提出警告、逐步替代以及保留。