阅读更多

6顶
0踩

编程语言

转载新闻 与Python之父的对话:Python 的成功之路

2008-10-25 11:40 by 见习记者 Norther 评论(0) 有6701人浏览
Python 之父 Guido van Rossum 就 Python 的历史、ABC 语言的影响,以及 Python 最初的设计目标进行了一次谈话.
Guido van Rossum 是 Python 的作者,Python 是一门解释性的、交互式面向对象编程语言.1980 年代末,Van Rossum 在荷兰的国家数学和计算机科学研究所开始致力于 Python,在荷兰语里,他工作的地方被叫做 Centrum voor Wiskunde en Informatica (CWI).从那时开始,Python 在开发者当中日益流行起来,这归功于 Python 简明清晰的语法和开发效率高的名声.

这次访谈会分为几个部分,每周都会发布其中一篇.Van Rossum 会对下列议题给出他的真知灼见:Python 的设计目标,Python 程序员的工作效率来自何处,弱类型意味着什么,等等.在第一篇中,Van Rossum Python 将对 Python 的历史,受到的主要影响,及其设计目标娓娓道来.

Bill Venners: 如果开发者从没用过 Python,那你会怎么向他们描述这门语言呢?

Guido van Rossum: 从一个方面说,你可以说 Python 是一个非常高阶的语言.而从另一个方面来看,你可以说它是一个非常高阶的语言,它实现的方式正好让它非常注重可交互性.Python 和脚本语言之间有着很多共同点,但是和更传统的编程语言也有颇多共通之处.

ABC 对 Python 的影响
--------------------------------------------------------------------------------

Bill Venners: 您能简要介绍一下 Python 的历史么?

Guido van Rossum: 在 1980 年代末,我在 Centrum voor Wiskunde en Informatica (CWI) 的一个小组里面做开发工作,这个小组的任务是设计实现一门叫 ABC 的语言.我不清楚人们对 ABC 对 Python 的影响有多少了解.我之所以会提及 ABC 的影响,是因为我在从事这个项目的时候,所获良多,而且从共事的同事身上也学到了很多东西,我对他们非常感激.

ABC 的设计动机非常明确.ABC 希望成为一门编程语言,这门语言是为非计算机程序员或软件开发者的那种比较聪明的计算机用户而设计的.在 1970 年代末,ABC 的主设计师曾向这种用户教授一些传统的编程语言.他们的学生有各个学科的科学家:从物理学家、社会学家到语言学家,为了使用超大型计算机,这些科学家需要帮忙.虽然这些人在自己的领域可算出类拔萃,他们还是对传统语言所有的各种局限感到诧异和不适应.根据用户的这个反馈,ABC 的设计者试图去开发一门新的语言.

另一个让 ABC 的设计者觉得失望的原因是 Basic.那时,Basic 是一门非常蹩脚的语言.虽然 Basic 也是为那种非程序员的计算机用户而设计的,但是它设计的着眼点是完全不同的.在那时,市面上所有的 Basic 版本都非常难用.几乎所有好玩的 Basic 程序都遍布着底层的奇技淫巧,比如说,如果要把屏幕背景色变成黄色的话,就需要修改内存的第 714 字节.

Bill Venners: 这个我也有印象.您是什么时候搞 ABC 的?

Guido van Rossum: ABC 的作者在 70年代晚期和 80年代初期,开始这门语言的设计工作.我于 1983 年加入这个小组.我想我们一直干到了 1986 年还是 1987 年.因为种种原因,ABC 项目并没有获得很大的成功.或许那时太早了,那个时候还没有因特网可做大规模的推广.

Python 的诞生
--------------------------------------------------------------------------------

Guido van Rossum: 1986 年,我转向了 CWI 的另一个叫 Amoeba (阿米巴虫) 的项目.Amoeba 是一个分布式操作系统.直到 1980年代末,我们意识到需要一个脚本语言.在那个项目中,我享有很大的自由度,所以我启动了一个迷你项目,这个小项目是服务于当时的我们手头的 Amoeba 项目的.那时,我对在 ABC 上获得的经验教训记忆犹新.我决定,想办法设计一门简单的脚本语言,它将拥有 ABC 的优点,但却没有他的缺点.

所以,我挽起袖子开始打键盘了.我实现了一个简单的虚拟机,一个简单的 parser,还有一个简单的运行时库.ABC 中每一个我欣赏的部分我都重新实现了一把.我还设计了一种基本的语法,它用缩进来表示语句之间的结合关系,而不是用花括号或者 begin-end 块来表示程序结构,同时,我开发了几个功能强大的数据结构:哈希表 (用来实现 dictionary,我们这样称呼它),列表,字符串,以及数字类型.

我从 ABC 借鉴了一些思想,并且加以改进.Python 在很多方面和 ABC 很相似,但是它们之间还是有着种种区别.Python 的列表,dictionary,基本的语句,还有缩进的使用都和 ABC 很不一样.ABC 用大写字母来表示关键字.我从来对大写字母就不感冒,不管是读还是敲键盘的时候,都看不惯它,所以在 Python 里关键字都是小写的.

我想,我对 Python 的成功最有创新的贡献,应该是让它易于扩展.这也是 ABC 最让我失望的地方.ABC 采用的是单一囫囵的设计(monolithic design).那时有个语言设计小组,小组里面的人就是大爷.他们设计语言的每个边边角角,根本就没有办法再加上一点点东西.虽然你可以编写自己的程序,但是你不可能轻轻松松就在底层加一些功能.

比如说,在上世纪 60、70 和 80 年代,用大型机软件开发人员最头痛的事情莫过于输入/输出 (I/O).所有的IO系统都太复杂.ABC 的设计者意识到了他们的用户在 IO 上的问题.不过,我觉得他们有些矫枉过正了.

ABC 的设计者放弃了用来读写文件的 IO 的方法,他们转而在程序里使用一些全局变量.他们的用户对全局变量的概念应该了然于胸.所以 ABC 的设计者让那些全局变量能持久化.如果你退出一次编程会话,你所有的全局变量就被系统存到磁盘上的一个文件里.等到你下次启动另一个会话,你所有的全局变量就会恢复回来.在某种程度上说,这一套运作得很好.这和 workspace 有几分相像,比如说 Smalltalk 里的 workspace 就和这个差不多.ABC 里有一个 print 语句,可以让你在屏幕上输出,还有一个 input 语句,让你可以从键盘上读入,但是 ABC 却没有办法可以把 IO 重定向到文件,或者从文件重定向到 IO.实际上,可以说他们根本就没有提供任何 IO 功能.

与此同时,个人电脑开始出现.个人电脑带了形形色色的软件包,用来处理文件.其中有电子表格文件、字处理文件,图形编辑器文件.ABC 的用户希望能用 ABC 写个小程序,从他们的字处理文件读出一些数据,然后把数据写到电子表格里,或者反过来,但是他们望洋兴叹,只能怪 IO 的无能.

Bill Venners: 他们想处理文件.

Guido van Rossum: 他们想处理的是数据,但是数据却呆在文件里面.而 ABC 里没有文件的概念,这让事情复杂化了.

Python 中的可扩展性
--------------------------------------------------------------------------------

Guido van Rossum: 让 ABC 里的缺位的文件支持雪上加霜的是,要扩展 ABC 语言并非易事.如果你这样想:“这个语言是用 C 实现的,所以我们在它的标准库里面加个读文件的函数难道不就行了?”,那就大错特错了.ABC 是没有标准函数库一说的.它有的是内置命令,但是管这些命令的是 parser.ABC 也有内置函数,但是这些函数和运行时绑在了一起.要为这个语言的标准功能添砖加瓦简直是难如登天.

对 Python 来说,我认识到,可扩展性是显而易见的重中之重.我之前就了解到 Python 需要在多种平台上运行.即,我知道我们要求 Python 在我们正在开发的 Amoeba 上,以及 UNIX 上运行,后者是我们作为桌面的操作系统.同时,我也想到了,我们也会需要他支持 Windows 和 Macintosh.我想到,这些系统上有些功能是共有的,比如标准 IO 库,但是还有些功能是不互通的.如果要在 Windows 的屏幕上画些东西,你写的代码肯定和 Macintosh 和 Unix 上不一样,而且编程的模式也会大相径庭.

后来,我为 Python 构思了一个具有相当灵活性的可扩展模型.我提出:“我们将会为这门语言提供一系列的内置对象类型,比如 dictionary, 列表,各种数字类型,以及字符串.而且,我们也会让第三方程序员能轻而易举地在系统中加入他们自己的对象类型.”

由于 ABC 是作为一种规模相对较小的语言设计的,所以它也不支持名字空间 (namespace).它只有函数和过程.你没有办法把函数和过程分组.后来,虽然他们加入了一个名字空间的机制,但是我觉得那套机制太简陋粗糙了.那时,我已经有了一些 Modula-2 和 Modula-3 的相关经验,因此我决定把模块 (module) 作为 Python 的主要编程单位之一.

我决定让 Python 有两种不同的模块:你可以用 Python 编写模块,但是也可以完全用 C 语言为 Python 编写模块.并且 C 语言写的模块可以实现新的数据类型,提供新的对象.这个想法后被被证明是先见之明,因为我在 CWI 的同事,用户,还有我自己都开始编写我们自己用的扩展模块.这些扩展模块让你能想干什么就干什么:调用图形库、数据流库,还能操作各种数据格式.

Bill Venners: 如此说来,如果我用 C 语言写了个模块,那么我就能在自己的 Python 程序里面用上它,而且模块中的数据类型就像 Python 亲生的?

Guido van Rossum: 一点没错.在 Python 里面,使用模块的方法就只有用 import 语句一途.Python 的 import 和 Java 的 import 有一点小小的不一样,不过它们背后的思想是共通的.一旦你 import 了某个模块名,系统就会用几种不同的办法试图找到这个模块.我们会设置一个搜索路径,用来在里面搜索不同类型的文件.如果你在为 import foo 找文件,那么它会最后找出一个叫 foo.py 或者 foo.so (Windows 上叫 foo.dll) 的文件.foo.py 是一个 Python 的源文件.Python 源文件将来会被解析并解释执行.这个过程让函数/过程得以为程序所用.foo.so 或者 foo.dll 是编译好的机器码.这种动态链接库是用 C 或者 C++ 实现的,但也有人用 Fortran 编写自己的扩展,这些扩展将来会链接到一些大型的 Fortran 库上去.从 Python 的角度来看,你使用事先编译好的机器码模块的方式和用 Python 源代码模块没什么区别.反正都是把它们 import 进来.你可以把模块的内容列出来,看看里面都有什么.或者,如果你对模块已经比较熟的话,就可以直接开始用它了.

翻译:tchaikov
6
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • e4a和python如何交互_与Python之父的对话:Python 的成功之路【转】

    与Python之父的对话:Python的成功之路【转】(2012-06-29 22:37:06)标签:杂谈分类:转载Python 之父 Guido van Rossum 就 Python 的历史、ABC 语言的影响,以及 Python最初的设计目标进行了一次谈话.Guido van Rossum...

  • 与 Python 之父聊天:更快的 Python

    在今年 5 月的 Python 语言峰会上,Guido van Rossum 作了一场《Making CPython Faster》的分享,宣告他加入了激动人心的“香农计划”,旨在 4 年内提升 Python 性能至 5 倍。近日,Guido 上了一档英文播客节目(时...

  • python之父叫啥-对话Python之父:Python下一步做什么?

    Python部落组织翻译,禁止转载,欢迎转发InfoWorld的编辑对话Python之父,讨论Python的性能、生态系统和在移动开发和浏览器方面的前景。问:有没有什么正在做的计划,来促进Python在移动计算领域的发展?一般提起...

  • python之父叫什么-对话Python之父:Python下一步做什么?

    Python部落组织翻译,禁止转载,欢迎转发InfoWorld的编辑对话Python之父,讨论Python的性能、生态系统和在移动开发和浏览器方面的前景。问:有没有什么正在做的计划,来促进Python在移动计算领域的发展?一般提起...

  • 与Python之父的对话:Python的成功之路

    Python 之父 Guido van Rossum 就 Python 的历史、ABC 语言的影响,以及 Python 最初的设计目标进行了一次谈话.Guido van Rossum 是 Python 的作者,Python 是一门解释性的、交互式面向对象编程语言.1980 年代末,Van ...

  • 独家对话Python之父:人类大脑才是软件开发效率的天花板

    【CSDN 编者按】十五年前,《程序员》杂志曾专访过 Python 之父 Guido van Rossum,一起探讨了 Python 3.0 的较为明显的新特性,即增加了对中文( Unicode )的支持。十五年过去,Python 的版本号只前进了一个数字,...

  • 中国python之父是谁-Python之父:谈Python

    Python之父:谈Python在宣传海报上,Python 之父 Guido van Rossum 在 EuroPython 2015 会议的发言分为讲话稿和现场问答部分,但是他上台后将全程改为现场问答的形式。他在回答现场观众的问题前,首先以自己的几个...

  • 中国python之父是谁-Python之父退休

    据 ZDnet 报道,Python 语言之父 Guido van Rossum 将离开云存储公司 Dropbox 准备退休。由于 Dropbox 主要是用 Python 开发的,van Rossum 在 2013 年受雇于 Dropbox,为这家云储存公司服务了六年半时间。10 月 30 ...

  • 对话 MySQL 之父 Monty:超越 MySQL 很难,但我做到了!

    MariaDB 的开发者很喜欢与客户互动交流,因为只有和客户直接接触,你才能了解到客户的需求,并且从客户那里获取反馈;在这个过程中,你会获取成就感和满足感,并从自己的事业中感受到热情。如果是在以前,沟通交流...

  • 父与子一起学python_父与子的编程之旅:与小卡特一起学Python 中文pdf版[22MB]

    《父与子的编程之旅:与小卡特一起学Python》是一本家长与孩子共同学习编程的入门书。作者是一对父子,他们以Python语言为例,详尽细致地介绍了Python如何安装、字符串和操作符等程序设计的基本概念,介绍了条件语句...

  • Python 之父谈 Python

    在宣传海报上,Python 之父 Guido van Rossum 在 EuroPython 2015 会议的发言分为讲话稿和现场问答部分,但是他上台后将全程改为现场问答的形式。他在回答现场观众的问题前,首先以自己的几个问题和答案推动了会议的...

  • 与小卡特一起学python 豆瓣_《父与子的编程之旅:与小卡特一起学Python》

    原标题:《父与子的编程之旅:与小卡特一起学Python》 内容简介本书是一本家长与孩子共同学习编程的入门书。作者是一对父子,他们以Python语言为例,详尽细致地介绍了Python如何安装、字符串和操作符等程序设计的...

  • 父子一起学python_父与子的编程之旅:与小卡特一起学Python

    父与子的编程之旅:与小卡特一起学Python所属分类:电子书籍开发工具:Python文件大小:22013KB下载次数:1上传日期:2020-11-25 12:50:36上 传 者:linhei说明:本书是一本家长与孩子共同学习编程的入门书。...

  • python哲学翻译_从 Python 之父的对话聊起,关于知识产权、知识共享与文章翻译...

    一、缘起前不久,我在翻译 Guido van Rossum(Python之父)的文章时,给他留言,申请非商业用途的翻译授权。过程中起了点小误会,略去不表,最终的结果是:他的文章以CC BY-NC-SA 4.0 许可协议进行授权。部分对话如下...

  • 【python之父】:从他的经历中我又重拾对编程的热爱,程序员也不是一直写代码就没有出路

    【python之父】:从他的经历中我又重拾对编程的热爱,程序员也不是一直写代码就没有出路

  • 毕业设计基于STC12C5A、SIM800C、GPS的汽车防盗报警系统源码.zip

    STC12C5A通过GPS模块获取当前定位信息,如果车辆发生异常震动或车主打来电话(主动请求定位),将通过GSM发送一条定位短信到车主手机,车主点击链接默认打开网页版定位,如果有安装高德地图APP将在APP中打开并展示汽车当前位置 GPS模块可以使用多家的GPS模块,需要注意的是,当前程序对应的是GPS北斗双模芯片,故只解析 GNRMC数据,如果你使用GPS芯片则应改为GPRMC数据即可。 系统在初始化的时候会持续短鸣,每初始化成功一部分后将长鸣一声,如果持续短鸣很久(超过20分钟),建议通过串口助手查看系统输出的调试信息,系统串口默认输出从初始化开始的所有运行状态信息。 不过更建议你使用SIM868模块,集成GPS.GSM.GPRS,使用更加方便

  • 基于tensorflow2.x卷积神经网络字符型验证码识别.zip

    基于tensorflow2.x卷积神经网络字符型验证码识别 卷积神经网络(Convolutional Neural Networks, CNNs 或 ConvNets)是一类深度神经网络,特别擅长处理图像相关的机器学习和深度学习任务。它们的名称来源于网络中使用了一种叫做卷积的数学运算。以下是卷积神经网络的一些关键组件和特性: 卷积层(Convolutional Layer): 卷积层是CNN的核心组件。它们通过一组可学习的滤波器(或称为卷积核、卷积器)在输入图像(或上一层的输出特征图)上滑动来工作。 滤波器和图像之间的卷积操作生成输出特征图,该特征图反映了滤波器所捕捉的局部图像特性(如边缘、角点等)。 通过使用多个滤波器,卷积层可以提取输入图像中的多种特征。 激活函数(Activation Function): 在卷积操作之后,通常会应用一个激活函数(如ReLU、Sigmoid或tanh)来增加网络的非线性。 池化层(Pooling Layer): 池化层通常位于卷积层之后,用于降低特征图的维度(空间尺寸),减少计算量和参数数量,同时保持特征的空间层次结构。 常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。 全连接层(Fully Connected Layer): 在CNN的末端,通常会有几层全连接层(也称为密集层或线性层)。这些层中的每个神经元都与前一层的所有神经元连接。 全连接层通常用于对提取的特征进行分类或回归。 训练过程: CNN的训练过程与其他深度学习模型类似,通过反向传播算法和梯度下降(或其变种)来优化网络参数(如滤波器权重和偏置)。 训练数据通常被分为多个批次(mini-batches),并在每个批次上迭代更新网络参数。 应用: CNN在计算机视觉领域有着广泛的应用,包括图像分类、目标检测、图像分割、人脸识别等。 它们也已被扩展到处理其他类型的数据,如文本(通过卷积一维序列)和音频(通过卷积时间序列)。 随着深度学习技术的发展,卷积神经网络的结构和设计也在不断演变,出现了许多新的变体和改进,如残差网络(ResNet)、深度卷积生成对抗网络(DCGAN)等。

  • 【三维装箱】遗传和模拟退火算法求解三维装箱优化问题【含Matlab源码 031期】.zip

    【三维装箱】遗传和模拟退火算法求解三维装箱优化问题【含Matlab源码 031期】.zip

  • 自己编写的python 程序计算cpk/ppk

    cpk&ppk python 小程序,品友点评

  • 基于Springboot开发的分布式抽奖系统.zip

    基于springboot的java毕业&课程设计

Global site tag (gtag.js) - Google Analytics