专栏首页鸿的学习笔记Python 之父说 Python 历史

Python 之父说 Python 历史

这篇文章主要内容来源于 Python 编程语言的最初设计者及主要架构师 Guido van Rossum 的博客 The History of Python(http://python-history.blogspot.com/)。博客文章不多,只有32篇而已,但是 Guido van Rossum 在这个博客里叙述和解释了 Python 一些重要特性的发明历史和这个特性诞生的原因,比如为什么 Python 会叫 Python,Python 为什么会使用缩进区分编程语句等等,有些特性很平常,而且替代选择也很多,至于为什么会选择其中一个,使用者往往不好回答,而对于最初设计者而言,却轻而易举。

发明 Python 的动机

Guido 大学毕业后加入了 CWI ,CWI 是荷兰的一家研究中心,它由荷兰政府教育部和其他研究基金资助,对计算机科学和数学进行学术级的研究。在 CWI 中,Guido 参与了 Amoeba 项目。Amoeba 项目是由 Andrew Tanenbaum 负责,CWI 和 Vrije Universiteit Amsterdam 两所机构共同参与开发的基于微内核的分布式系统。

在 Amoeba 项目中,Guido 发现用 C 语言开发系统管理程序所花费的时间太长了,而且因为 Amoeba 是一个全新的底层操作系统实现,导致了和原有的 Bourne shell 不兼容,在 Bourne shell 中无法执行 Amoeba 项目中的一些程序。这些原因让 Guido 意识到它需要一个能够弥合 C 和 shell 之间鸿沟,更高抽象级别、更加简单的编程语言去完成工作任务。

于是 Python 诞生了。

同样的 Guido 也在文章中解释了为什么选择造轮子发明 Python,而不是移植其它编程语言 ?那是因为当初并没有其它编程语言可以完成这些任务。

为什么 Python 要叫 Python ?

Python 的中文是“蟒蛇”的意思,而且 O’Reilly 出版社也用蟒蛇图片作为了 Python 相关书的封面(O’Reilly 非常喜欢用动物图片去作为其出版物的封面),平时看过的一些关于 Python 文章想当然的认为 Python 这门语言与蟒蛇关联上了,但实际上 Guido 并不喜欢将 Python 与蛇关联上。

For many years I resisted attempts to associate the language with snakes.

Guido 使用 Python 这个名字的灵感来源于他喜欢的一个马戏团的名字 Monty Python,并且他认为使用 Python 更具有 IT 行业一贯以来的不拘一格的个性。也符合编程语言的名称来源于名人的名字的习惯。

The word “Python” was also catchy, a bit edgy, and at the same time, it fit in the tradition of naming languages after famous people, like Pascal, Ada, and Eiffel.

Guido 眼里的 Python 是什么样的?

Guido 在博客的开篇便提起了他所认为的 Python 是什么样的一门语言,从中摘抄几个核心设计点:

  1. Python 大量的采用了 C 语言里面的设计,比如 if、else 等关键字都直接来源 C 语言。但是放弃了 C 语言的大括号和分号,选择了缩进去区分不同的编程语句。
  2. Python 是一门动态语言,不像 C 语言一样需要预先声明变量和指定变量类型,,因此 Python 里的变量只是所引用对象的名称,并且也可以在程序运行时改变变量类型。
  3. Python 内置了大量的数据类型,包括布尔(Boolean)、数字(Number)和字符串(String)等,这些类型都是不可变的。除此以外还有像列表、元组和字典这种容器型的数据类型。
  4. 为了程序的模块化,Python 引入了包(packages)、模块(modules )、类、方法和函数。为了流程控制,Python 提供了 if/else、while 和可迭代的实例。为了处理程序异常,Python 使用了 Exception 语法,raise 关键字可以抛出异常(exception),try/except/finally 可以处理异常。
  5. Python 的所有对象都是一等对象,这意味着函数、类、方法、模块和所有的其他对象都可以在运行时自由地传递,并放入在各种数据结构(例如列表或字典)中去。
  6. 同样的,Python 还支持面向对象编程。
  7. 除了自身特性外,Python 还拥有着大量的标准库和第三方库,方便使用者完成各种各样的需求。
  8. 最后,Python 的标准实现使用 C 语言实现的,但是 Python 不仅仅局限于 C 语言,它也可以用 Java(Jython)、Microsoft .NET(IronPython),甚至是 Python 自己实现(PyPy)。

注意到没有,Guido 在开篇从未提到 Python 是一门追求性能的语言,至于为什么,在下一章提到 Guido 的设计哲学会提到,为什么 Python 不会一味地追求性能。

Python 的设计哲学

在了解 Python 的设计哲学之前,首先要知道 Python 在刚开始时是一个一个人独自维护的项目,没有任何官方预算,也没有任何其它支持,并且 Guido 也希望能尽快出结果。这些因素影响了 Python 的设计哲学。

First of all, Python was originally conceived as a one-person “skunkworks” project – there was no official budget, and I wanted results quickly

可以偷懒的设计哲学:

  • 尽可能从其他地方借用想法。
  • “事情应该尽可能简单,但不要简化。” (爱因斯坦)
  • 只做好一件事情(UNIX哲学思想)。
  • 不要对性能太担心-以后有需要时,再进行优化。
  • 不要与环境(environment)抗争,顺其自然。
  • 不要追求完美,“足够好”就可以了。
  • (因此)有时可以偷工减料,后续可以想办法弥补。

这些设计哲学帮助 Guido 在实现 Python 时节省了大量的宝贵时间,没有陷入到没有必要的细节中去;在不应该节省时间的地方,Guido 花费了大量的时间去精雕细琢。Guido 在 Python 这门语言中展现了他对实现细节本身和实现细节所需要花费时间的平衡的把握程度。

不可以偷懒的设计哲学:

  • Python 不能仅仅运行在某个特定平台(Linux 或者是 Windows)上,虽然 Python 在一些平台上的某些功能并不总是可用的,但是其核心功能应该在任何平台上都可以使用。
  • 不要用机器可以处理的细节去打扰用户,也就是说,机器能够完成的,就需要用户去实现它。
  • 支持和鼓励只能运行于特定平台的用户代码,但不能让用户不能访问对平台本身的功能或特性(这与Java形成了鲜明对比)。
  • 一个大型的复杂系统应具有不同级别的抽象扩展能力,这可以为有想法的的用户(无论其是否熟练)提供最大的自由去实现他想要的功能。
  • 错误不应该是致命的,也就是说,只要虚拟机仍在运行,用户代码就能够从错误状况中恢复过来。
  • 同样的,错误不应该被静默地传递。
  • 不应该让用户 Python 代码中的 bug 导致 Python 解释器出现未定义行为。
  • 最后,为了尽可能保持 Python 的可读性,标点符号使用应该符合书面英语或高等代数中的常用用法,除非遇上了编程语言里的历史传统(比如用 x * y 表示乘法)。

就像 Guido 所说的那样,这些设计哲学正是让 Python 获得如此巨大成功的主要原因之一。

In many ways, the design philosophy I used when creating Python is probably one of the main reasons for its ultimate success. Rather than striving for perfection, early adopters found that Python worked "well enough" for their purposes. As the user-base grew, suggestions for improvement were gradually incorporated into the language.

Python 为什么会使用缩进和冒号(:)区分编程语句?

Python 使用缩进区分编程语句来源于 ABC 编程语言,但是这个想法并非起源于 ABC,它是 Donald Knuth 所提倡的一种著名的编程风格( occam 编程语言也使用过它)。但是,ABC 编程语言的作者确实发明了使用冒号将导入语句(lead-in clause)与缩进块(indented block)分开的方式。

至于为什么要引入冒号进一步区分编程语句,是因为在一项早期的用户测试中发现单纯地使用缩进去区分语句,会让一些用户产生疑惑,影响了他们对编程语言的学习。而后面在编程语言里添加了冒号去区分编程语句,就会引起用户对后续内容的注意,从而帮助用户将前后的编程语句联系起来(想想 if/else、while 和 for 语句)。

总结

除了上文提到,The History of Python 这个博客中还聊了很多,比如有对列表推导和迭代器历史的叙述,还有对 Python 为什么不是一门函数式编程语言,却有着函数式编程语言特性的解释,等等。

通过对这些历史的了解,读者朋友可能在某个时刻写着写着代码,用到了某个特性,想到了它的历史,便会心一笑:原来如此,心情也会豁然开朗。

本文分享自微信公众号 - 鸿的笔记(goodreadman),作者:鸿影洲冷

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 写在 Python 3.9 即将出世的前夕

    今天读 PyCoder's Weekly( PyCoder's Weekly 会收集和整理一周内关于 Python 的最新文章和讨论,并发送给订阅者的邮箱)时候...

    哒呵呵
  • Python写的Python解释器(一)

    导论 Byterun是一个用Python实现的Python解释器。它的结构类似于CPython(Python的主流实现方式)。

    哒呵呵
  • Python和Scala的定义变量

    每一门的编程语言背后都代表着某一种特别的哲学,由这一哲学进而设计出属于这门程序语言的语法,Python和Scala也不例外。我们从变量的定义去一窥Python和...

    哒呵呵
  • 工具 | 编程书单:十本Python编程语言的入门书籍

    本文与大家分享一些Python编程语言的入门书籍,其中不乏经典。我在这里分享的,大部分是这些书的英文版,如果有中文版的我也加上了。有关书籍的介绍,大部分截取自是...

    CDA数据分析师
  • 适合 Python 入门的 8 款强大工具!

    Python是一种开源的编程语言,可用于Web编程、数据科学、人工智能以及许多科学应用。学习Python可以让程序员专注于解决问题,而不是语法。由于Python...

    Python知识大全
  • 【Python】从C++/Java到Python入门(1)

    摸了很久勉强看完了Python的入门,看完了Python与C++和Java的差别之处,以此权当笔记来写这篇。如果之前就会使用C++或Java的话,这篇的文章的用...

    ZifengHuang
  • 全球超2万名开发者调研:Python 3渗透率至84%

    在2018年秋季,Python软件基金会与JetBrains发起了年度Python开发者调查。 报告的目的是寻找Python领域的新趋势,帮助开发者深入了解20...

    abs_zero
  • Python用来做Web开发的优点!

    Python是世界上最受欢迎的编码语言之一,在80年代后期首次受到ABC和Modula-3语言的影响而被概念化。从1991年的第一个版本到成为开源项目的2.0版...

    python学习教程
  • 如何从 0 开始学 Python 自动化测试开发(一)

    Python 作为大数据工程和 AI 的主流开发语言,近年来一直保持强劲的上升趋势。即使目前 AI 领域还没有大量的成功商业案例(盈利的)出现,Python 语...

    霍格沃兹测试开发
  • 适合Python入门基础书籍

    对学习程序的同学而言,有一本好的学习python的课本,就如同有一个好的老师一样,所以本文为大家介绍书几本Python程序员必备的工具书!让学习python的同...

    小小科

扫码关注云+社区

领取腾讯云代金券