Python 是一门简洁而又强大的编程语言。相信即使是刚接触编程的同学也一定听说过「人生苦短,我用 Python(Life is short. You need Python.)」这句话。目前人工智能越来越火,Python 凭借它扩展性强、第三方库丰富和免费开源等特点,在机器学习、数据挖掘、人工智能等领域有着很大优势,前景非常值得期待。(更多关于 Python 未来的讨论:可以参考:未来十年Python的前景会怎样? - 知乎)


Python 创始人穿着「人生苦短,我用 Python」的T恤

本文将简单介绍 Python 的发展历史。对学习一门编程语言来说,了解它的历史,可以帮助我们理解它的功能来源、设计理念,一定会对我们学习和使用它大有裨益。


Python 的起源

你也许听过 Python 诞生的故事:1989年的圣诞节,一个名叫 Guido von Rossum 的荷兰程序员为了打发无聊的圣诞节假期开始写 Python 语言的编译/解释器。
我最初听到这个故事,脑海里浮现出了这样的画面:一个仿佛上帝的天才程序员,洞悉了计算机世界的所有秘密,一切任务对他来说都太过简单以至于无法提起兴趣,于是便随手写了发明了一门语言,而这门语言在后世产生如此大的影响力……实在是令人敬畏。但毕竟计算机领域中这样的传奇故事太多了。

Guido von Rossum

然而事实并非这么简单。在Python 诞生之前还有一段故事要讲。Guido von Rossum 的确是一个天才和神级程序员,然而他选择创造 Python 是有原因的。80年代的时候,个人电脑浪潮已经被掀起,然而其配置与今天相比还处于相当低的水平。于是所有的编译起的核心是做优化,以便使程序在极小的内存条件下仍能运行。这也使得那时的程序员在编程时像计算机一样思考,恨不得榨干计算机每一寸的能力,连指针都被认为是在浪费内存,至于动态类型、面向对象什么的,就只会让电脑陷入瘫痪。
Guido 对此感到很不满。即使是像他这样熟练掌握C语言的人,在用C写功能时也不得不耗费大量的时间。同时他还有另一个选择,就是 shell。Bourne Shell作为UNIX系统的解释器已经长期存在,它可以像胶水一样将 UNIX 下的许多功能连接在一起。许多C语言下上百行的程序,在shell下只用几行就可以完成。然而,shell的本质是调用命令。它并不是一个真正的语言,不能全面的调动计算机的性能。
所以 Guido 希望有一种语言可以兼具 C 和 shell 的优点。既能全面调用计算机的功能接口,又能轻松的编程。事实上,这时的 Guido 正在参与荷兰的 CWI(数学和计算机研究所)的 ABC 语言的开发。这种语言与当时大部分语言不同,它以教学为目的,希望让语言变得易读、易用、易学。然而,ABC 存在着一些致命的问题,使得它最终没有流行起来:

  • 可扩展性差。ABC 不会死模块化的语言,想在 ABC 中增加功能就必须改动很多地方
  • 不能直接进行 IO。尽管可以通过诸如文本流的方式导入数据,但 ABC 无法直接读写文件。
  • 过度革新。ABC 语言太贴近自然语言,虽然很特别、对新手很易学,但让大多数还掌握其他语言的程序员来说非常不适应,实际增加了学习难度。
  • 传播困难。ABC编译器很大,必须被保存在磁带上。安装时必须有一个大磁带,是传播变得困难。

注意上面这几点,它们都是 Python 在设计开发中极力避免的。可以说 ABC 语言对于 Python 语言是非常重要的。


Python 的诞生

了解了上述 Python 起源的历史,我们才能够理解 Python 诞生的情况。1991年,第一个 Python 编译器(解释器)诞生,它用C语言实现,并能够调用C库(.so 文件)。从一出生,Python已经具有了:类,函数,异常处理,包括表和词典在内的核心数据类型,以及模块为基础的拓展系统。
Python 语法很多来自C,但又受到 ABC 语言的强烈影响。来自 ABC 语言的一些规定直到今天还富有争议,比如强制缩进。但这些语法规定让 Python 容易读。另一方面,Python 聪明的选择服从一些惯例(特别是C语言的惯例)。比如使用等号赋值,使用 def 来定义函数。Guido 认为,对于「常识」上确立的东西,没有必要过度纠结。
Python 从一开始就特别在意可拓展性。Python 可以在多个层次上拓展。从高层上,你可以引入 .py 文件。在底层,你可以引用C语言的库。Python 程序员可以快速的使用 Python 写 .py 文件作为拓展模块。但当性能是考虑的重要因素时,Python 程序员可以深入底层,写C程序,编译为 .so 文件引入到 Python 中使用。Python 就好像是使用钢构建房一样,先规定好大的框架。而程序员可以在此框架下相当自由的拓展或更改。


Python 的发展

最初的 Python 完全由 Guido 本人开发。然而此后Guido同事迅速爱上了这门新语言并不断反馈使用意见,参与到 Python 的改进中。于是 Guido 和一些同事构成 Python 的核心团队,他们将自己大部分的业余时间用于hack Python(也包括工作时间,因为他们将 Python 用于工作)。随后,Python 拓展到CWI之外。Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python 程序员可以花更多的时间用于思考程序的逻辑,而不是具体的实现细节。这一特征吸引了广大的程序员。Python开始迅速流行起来。
此外,还有两点外界因素使 Python 得到迅速发展,一是硬件性能的提高。当时已进入90年代初,个人计算机开始进入普通家庭,程序员们开始关注计算机和语言的易用性。相比 ABC 语言因为硬件的性能限制而失败,Python 生逢其时。二是互联网的发展,当时许多程序员以及资深计算机用户已经开始频繁使用 Internet 进行交流。一种新的软件开发模式开始流行:开源。开放性是 Python 能够发展壮大的根本原因。Guido 维护了一个 maillist,Python 用户就可以通过邮件进行交流。Python 用户来自许多领域,有不同的背景,对Python也有不同的需求。每当用户不满足于现有功能,很容易对Python进行拓展或改造。随后,这些用户将改动发给 Guido,并由 Guido 决定是否将新的特征加入到 Python 或者标准库中。
Python 被称为「Battery Included」,是说它以及其标准库的功能强大。这些是整个社区的贡献。Python 的开发者来自不同领域,他们将不同领域的优点带给 Python。比如 Python 标准库中的正则表达是参考Perl,而lambda, map, filter, reduce函数参考 Lisp 。Python 本身的一些功能以及大部分的标准库来自于社区。Python 的社区不断扩大,进而拥有了自己的 newsgroup ,网站(python.org) ,以及基金 (Python Software Foundation)。从 Python 2.0 开始,Python也从 maillist 的开发方式,转为完全开源的开发方式。社区气氛已经形成,工作被整个社区分担,Python 也获得了更加高速的发展。
到今天,Python 的框架已经确立。Python 语言以对象为核心组织代码,支持多种编程范式,采用动态类型,自动进行内存回收。Python支持解释运行,并能调用C库进行拓展。由于标准库的体系已经稳定,所以Python的生态系统开始拓展到第三方包。这些包,如Django,web.py,wxpython,numpy,matplotlib,PIL,将 Python 升级成了物种丰富的热带雨林。
如今 Python 已经进入到 3.0 时代,由于 Python 3 向后不兼容,所以从 2.0 到 3.0 的过渡并不容易。另一方面,Python 的性能依然值得改进,它的运算性能仍低于 C++ 和 Java。可以说 Python 依然是一个在发展中的语言,它还有着更加值得期待的未来。
(关于 Python 3.0 之后的发展,可以阅读这篇博客:Python 3.X简史——记录3.0之后的重要更新)


从上述 Python 的历史,我们可以学习到很多,比如 Python 清晰简明、扩展性强等特点的来源,如何更充分的用好 Python,开源、开放的重要性等等。无论如何,我对 Python 和编程的兴趣又增添了几分。


本文主要参考:
Vamei 的博客:Python简史
Wikipedia: Python - Wikipedia

Python 语言发展历史相关推荐

  1. python语言发展历史

    Python是一种面向对象.直译式计算机程序设计语言,由荷兰人Guido van Rossum发明于1989年,1991年发行第一个公开发行版.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各 ...

  2. python基础之语言发展历史

    博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...

  3. java语言发展历史_Java编程语言的历史和未来

    java语言发展历史 通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序. 开始免费试用! 作为互联网上著名的编程语言 ,Java对人们如何浏览数字 ...

  4. ALGOL语言 发展历史

    一提到计算机高级语言,可能大家就会想到C语言.C++.Python.Java等等.ALGOL语言可能很多人都没有听说过. 但这个现在已经销声匿迹的语言却是C语言.C++.Java等高级语言的直接鼻祖, ...

  5. Python的发展历史及特点

    一.Python发展历史 Python语言发明于1989年,1991年公开发行.Python的名字来源于英国喜剧团 MontyPython,原因是Python的创始人 Guido van Rossum ...

  6. C语言发展历史,C语言特点,C语言利于弊,入门须知三招

    C语言是面向过程的,而C++是面向对象的 这些是C/C++能做的 服务器开发工程师.人工智能.云计算工程师.信息安全(黑客反黑客).大数据 .数据平台.嵌入式工程师.流媒体服务器.数据控解.图像处理. ...

  7. python语言发展历时_编程语言十年发展史

    原标题:编程语言十年发展史 作者 | Cabe Atwell 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 过去十年,编程语言发生了很大的变化,随着互联网大时代的迈进, ...

  8. python编程语言的优缺点_组队学习优秀作业 | Python的发展历史及其前景

    ↑↑↑关注后"星标"BioPython每日干货 & 每月组队学习,不错过BioPython学习 开源贡献: BioPython团队 创始人 Guido van Rossum ...

  9. java基础学习总结一(java语言发展历史、jdk的下载安装以及配置环境变量)

    最近一段时间计划复习一下java基础知识,使用的视频课程是尚学堂高淇老师的,上课过程中的心得体会 直接总结一下,方便以后复习. 一:计算机语言的发展 1:机器语言,最原始的语言,主要有"01 ...

最新文章

  1. python程序设计基础考试题库及答案_智慧职教Python程序设计基础题库及答案
  2. js里面拼接代码和使用ModelAndView
  3. 详解getchar()函数与缓冲区
  4. 【css】响应式布局 @media媒介 适配平板手机
  5. NHibernate学习之五:三种常见的配置方法。
  6. QCostomPlot 示例注解 3
  7. 寻找数组中 的最大值最小值
  8. Git检出指定的目录-稀疏检出
  9. premium导入后缀为db_Python 导入txt文件到mongo
  10. 断言失败的vc++文档_了解C / C ++中的断言
  11. Spring @Service批注
  12. linux安装mysql8.0.18_详解mysql8.018在linux上安装与配置过程
  13. iptables的备份
  14. 切换linux默认桌面,Debian默认桌面再次切换到Gnome
  15. status 状态为 pending
  16. 计算机相关课程考核,计算机专业编程实践类课程考核方法
  17. 如何把晨光计算机调成音乐模式,伴着晨光走向你——广播《晨光音乐行》栏目运作心得...
  18. vue实现微信web开发之扫码签到
  19. python tkinter滚动条不起作用_python – 水平滚动条在Tkinter中不起作用
  20. [Codeforces947D]Riverside Curio(思维)

热门文章

  1. java计算机毕业设计高校心理测评管理系统源码+mysql数据库+系统+lw文档+部署
  2. mysql 备份 发送邮件_mysql 自动备份发邮件 到指定邮箱
  3. 微信小程序流量主开通 (如何赚钱)
  4. hdu 5312 打表加特判
  5. 【历史上的今天】7 月 12 日:世界上第一台商用数字计算机;Python 之父卸任 BDFL;Wacom 成立
  6. 8种绝对成交的销售话术技巧
  7. 效率评价方法--数据包络分析
  8. 2018-07-03 根据Excel后缀名获取WorkBook
  9. 台达PLC实现远程下载程序
  10. 安卓手机如何让你的微信减肥不卡顿