专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
程序员的那些事  ·  清华大学:DeepSeek + ... ·  2 天前  
程序员小灰  ·  3个令人惊艳的DeepSeek项目,诞生了! ·  昨天  
程序猿  ·  “未来 3 年内,Python 在 AI ... ·  4 天前  
程序员的那些事  ·  成人玩偶 + ... ·  4 天前  
程序员小灰  ·  DeepSeek做AI代写,彻底爆了! ·  4 天前  
51好读  ›  专栏  ›  SegmentFault思否

Alex Martelli 教你学  Python

SegmentFault思否  · 公众号  · 程序员  · 2019-09-15 10:00

正文



Alex Martelli ,意大利计算机工程师,《Python in a Nutshell》第一、二版作者,《Python Cookbook》前两版与 《Python in a Nutshell》第三版的合著者,Python 软件基金会(PSF)成员。


因在 Python 社区的卓越贡献,2002 年与 2006 年分别获得 Activators 精选奖与 Frank Willison 纪念奖。


2005 年起,他开始在谷歌工作,现任谷歌高级工程师、谷歌云平台社区支持团队技术主管。


Alex 是 Stack Overflow 积极贡献者,还常在各种技术大会上发表演说。


访谈主题


访谈主题: Python 图书,Python 2.7 与 Python 3.x,谷歌与 Python。


Mike Driscoll: 能简单介绍一下您的背景吗?


Alex Martelli: 我是意大利人,在国内学的是电子工程专业。 毕业后,我想从事集成电路设计,虽然设计其它系统也很酷,但我还是钟情于集成电路。


那时,真正有意思的电路设计都是美国公司在做,所以,我的第一份工作在美国,也就是大家耳熟能详的德州仪器 (TI)




德州仪器名气很大,不管是消费产品还是前沿芯片,他们都在做,但我并不适应这家公司。 德州仪器的风格是一下子启动很多项目,然后毫无征兆的就废弃这些项目,结果,我就在各个废弃的项目团队间跳来跳去。


Alex Martelli: ‘我就在各个废弃的项目团队间跳来跳去。


我也不能指责德州仪器这种做法。 他们不想干扰工程师的生活,而我当时只是个小年轻儿,还是移民,反正在哪里都一样。 不到一年,我就在达拉斯、奥斯汀、休斯顿与拉伯克的四个实验室工作过,还不到一年!


这么折腾给人的压力很大。 之前觉得德州仪器的工作更有意思,我拒绝了 IBM 给的 Offer,后来,我只好又回过头去找 IBM。 IBM 也开发过不少颇具创意的集成电路,只是不广为人知,他们关注的主要是科研,不是为了量产,仅仅是为了验证概念。


IBM 在这个领域也有很多走在时代前沿的技术。 我记得 IBM 获得过一次诺贝尔奖,他们用单个原子拼写出 IBM 三个字母。 比起观测原子,用电子显微镜摆放原子绝对是别出心裁,就像科幻小说似的。


IBM 当时要在意大利,具体说是罗马,设立一家研究院,他们希望有人能毛遂自荐,不用想,我肯定自告奋勇。 这个机会不错,还能回国,那里有更好喝的卡布奇诺,还有更美味的面食! 就这样,80 年代我又回到了意大利,从此我的事业开始起步了。


Driscoll: 您是怎么成为程序员的?


Martelli: 那是在 IBM 时的事儿,我们当年刚开发了一台图像处理原型机,这在当时可是很了不起的成就。 这台原型机配备了专属芯片、帧缓冲器和显示器,现在看起来这算不了什么,但当时可是价值不菲。


Alex Martelli: ‘我们当年刚开发了一台图像处理原型机,这在当时可是很了不起的成就。


我们还为这台原型机举办了启动仪式,有位主管走过来和我说,“恭喜你们,只可惜这台原型机今后要在角落里吃土了。 ” 我很惊讶,“怎么会在角落里吃土? IBM 研究院有各个领域的科学家,天文学家、地质学家,都能用上这台机器啊。


“你说的没错,” 他说,“但这台机器不支持他们用的编程语言啊,这些科学家用的是 Fortran 和 APL。 想让这台机器派上用场,要有人写个通道程序 (Channel Program) ,地质学家和天文学家才不会干这事儿。 ” 这可是一个庞大的软件项目,要开发所有科学家所需的界面与支持库。


我说,“能不能让我们组建一个小团队开发这个软件呢? ” 他反问我,“你觉得多少人合适?


我当时真的希望“自己设计”的机器能有用武之地,而不是放在那里落土,于是,我大着胆子低声说道,“3 个人?


他笑了起来,“没问题,我负责找人,你负责组建团队,不过半年后得做出点成绩来。


我就这样稀里糊涂地当上了 IBM 小主管,成了一名低层管理者,准确的说是技术带头人。 但这并不意味着标准降低了,我需要自学大量的软件技能才能编写通道程序,要整合各个支持库,还要找出为那些外围设备加速的支持库算法。


Driscoll: 那您成功了吗?


Martelli: 半年后,我们只搞出了一套凑合能用的概念模型,好在领导同意我们接着干。 最后,这个项目搞了两年,不过总算为 APL 与 Fortran 开发出了所需的支持库,这已经很难能可贵了。


Alex Martelli: ‘我们总算为 APL 与 Fortran 开发出了所需的支持库,这已经很难能可贵了。


这个软件项目让我们精心打造的硬件系统派上了用场,科学家与程序员可以用它实现图像处理与可视化,无需居间软件,也不用学习汇编语言或通道程序。


不过,两年完全没有接触硬件设计,这是个大问题,我甚至没有跟进硬件设计的趋势。 那个年代,硬件设计,特别是集成电路,每年都有革命性的发展。 不能在这一行占据前沿位置,很快就跟不上潮流了。


Driscoll: 这就是您为什么会转向软件?


Martelli: 是啊,我有多年经验,就算那些刚毕业的大学生,哪怕他们精通最新的高科技工具,我也比他们强。


但另一方面,哪怕最简单的管理工作与软件开发,也可以为我真正想干的事业添加很多附加值,比如,这些为集成电路设计的软件系统。


走了几年下坡路以后,我不得不承认自己设计不了像样的现代硬件系统了。 长期以来,我干得软件开发与管理工作越来越多。 其实,很多人与我的际遇类似,都是从硬件起步,然后,逐渐发现硬件本身不能真正解决问题。


Alex Martelli: ‘很多人与我的际遇类似,都是从硬件起步,然后,逐渐发现硬件本身不能真正解决问题。


我女儿现在就是这样。 她是电信工程专业,也就是高级无线电系统专业的博士,虽然痴迷于硬件,但她现在的工作四分之三都是软件。 这是因为所有的网络,越往底层走,越是软件驱动。


打个比方,假如设计一个天线,没有软件与数据的支持,其自身无法运作。 如今的设备都会配备让人眼花缭乱的天线阵列,并有足够的智能支持,基于信号质量,判断什么时候激活哪个天线。 这与我毕业时的无线电技术不可同日而语,需要大量软件支持。


Driscoll: 您为什么会学 Python 呢?


Martelli: 这段经历其实挺有意思。 很多年前,刚踏入迷人的软件世界时,我曾用业余时间开发过一个研究定约桥牌打法的实验系统。


定约桥牌是 Harold Vanderbilt 在 1920 年代发明的。 我学打定约桥牌的时候,有关这个游戏的数学理论很少。 只有一名数学大师,Émile Borel,写过一本关于桥牌的数学理论图书。


那时,计算机的运算能力已经很强,也很便宜,就算拿来分析这些娱乐活动也不算可望而不可及。 我就是在当时新卖的个人电脑上重构了 1930 年代首次提出的一种试验性思路。


Alex Martelli: ‘我重构了 1930 年代首次提出的一种试验性思路。


我是按照传统的硬件思路搞软件,从编程系统的组织方式上看,这个解决方案就是一团糟,用的语言数不胜数,Modula-3、Perl、Visual Basic、Scheme,等等,等等,我自己都觉得害怕,但不管怎么说,这一堆七拼八凑的东西能跑得起来。


Driscoll: 这个程序能赢牌吗?


Martelli: 这个程序每手玩了一百万次,并记录了所有结果,证明了 1920 年代与 1930 年代最聪明的桥牌大师,Ely Culbertson,令人不可思议的直觉。


我把分析结果写成了研究报告,提交给了《桥牌世界》,这是当时最有名的桥牌杂志。 杂志编辑看了以后非常感兴趣,还与我一起改进这篇报告。 这篇研究成果最终发表在《桥牌世界》 2000 年 1 月刊与 2 月刊上。


之后,我与不少桥牌选手互通有无,甚至有桥牌冠军问我,“你能用这些理论帮我解决问题吗?


我很高兴能帮上他们的忙,只是这个程序太脆弱了,哪怕改个标点符号,也会莫名其妙地崩溃。 纯属一团糟! 所以我决定,不管是不是个坑,我都要重写一遍。 目标就是尽可能用一种编程语言重构这个程序,但问题是用哪种语言!


Driscoll: 那您找到了想要的语言吗?


Martelli: 能实现我要求的语言只有 Lisp,其实我更偏向 Scheme,这可能和我的硬件背景有关。


可惜它的免费版没有足够的支持库,不能实现完成所需的辅助任务。 再怎么说这也只是个人项目,我已经耗费了不少时间,不想再在这上面花钱了。 有个同事向我推荐,“你可以试试新出的那个编程语言,现在特火,叫 Python。


Alex Martelli: ‘有个同事向我推荐,“你可以试试新出的那个编程语言,现在特火,叫 Python。 ”’


我说,“别别别,我都学了一打编程语言了,我可不想再学了! ” 但他非要坚持,而我又很尊重这位兄弟,最终还是我挡不住他的狂轰乱炸,决定给这个编程语言一次机会。 我给自己定了个小目标,用它解决个小问题,看看它到底好在哪里。


Alex Martelli: ‘我说,“别别别,我都学了一打编程语言了,我可不想再学了! ”’


1990 年代后期,我还不懂网络,这还是个新鲜事物,看上去蛮有趣的,我就琢磨着自己搭建个网站。 网站编程与 Python 我都是自学的,你猜我花了多长时间? 才一个周末! 我说过,不论做什么事情,都得下点功夫。


我周五晚上开始边看手册边试着写代码,没过多久,我就不看用看手册了,我连猜带蒙,再根据其它代码的写法推断下一步该怎么写,我居然有 90% 都蒙对了。 这门语言貌似和我的脑回路很搭,就好像我怎么想的,它就是怎么做的。


Alex Martelli: ‘这门语言貌似和我的脑回路很搭,就好像我怎么想的,它就是怎么做的。


周六下午刚过,我就学完了。 我做出了一个能初步运转的 CGI,还有一个 Web 应用,可以用它计算定约桥牌中同花色分牌的条件概率。 周末还剩一天,接下来,我该干点什么?


我就想,“这个程序不错,但只支持意大利语,其它语种的人可能对它也有兴趣。 我应该做个支持英语、法语的多语版本,反正,这两种语言我也很擅长。


做多语版本需要模板系统,但我没找到满意的 Python 模板系统。 我试过 Gofer 等工具,但都不合我意。 最后,我干脆自己写了一个模板系统,叫“Yet Another Python Template Utility (YAPTU)”,即,“另一个 Python 模板工具”。 周日,这个工具就可以顺利运行了。 然后,我把它打包上传到一个发布自由软件的地方,这样我就有了自己的网站。




Driscoll: 有人对您的作品感兴趣吗?


Martelli: YAPTU 当时确实吸引了一个人注意,他正为加州大学伯克利分校开发计算机科学专业网站。 他觉得 YAPTU 是最好用的模板工具,并打算用 Python 开发网站,他还对 YAPTU 做了一些优化,并给我发了补丁文件。 我们一起讨论怎么能把 YAPTU 做得更好,后来还成了朋友。


Alex Martelli: ‘我们一起讨论怎么能把 YAPTU 做得更好,后来还成了朋友。 他就是 Peter Norvig,现在是谷歌研究主管。


他就是 Peter Norvig,现在是谷歌研究主管,也是畅销编程书《人工智能: 一种现代手段》的作者。 由此可见,Python 从那时起就帮我搭建了非常好的人脉。



人工智能:一种现代手段


我还尝试在工作中推广 Python,可惜没有成功。 决策权在专业管理人员手里,他们认为就算我们现在用的程序都是面向 Unix 工作站的,但未来属于 Windows,其它操作系统都将不复存在。 的确,如今已经很难买到 Unix 工作站了。 到处都是使用 Linux 或 Windows 的 PC。 从这点上看,他们的预判非常正确。


我不愿意只使用微软乐意支持的编程语言,但高层管理人员也不会同意用其它编程语言。 我只能在他们注意不到的地方偷偷用 Python,比如测试框架,一个叫做 haha.bat 的 Shell 脚本文件。


这是 Windows 推出 cmd 之前的事情了。 Python 脚本非常有用,且易于维护,只有一点让人不太满意。 上班时,我只能用微软的 Fortran 编译器处理漏洞,然后挤出可怜的时间使用 Python。


Driscoll: 咱们稍微换个话题,您是怎么成为 Python 图书作者的呢?


Martelli: 我非常喜欢 Python,Guido van Rossum、 Python 开发者及社区里的每一位伙伴,他们给了我如此美妙的礼物,我希望有所回报。


我能做什么呢? 当时有个叫 comp.lang.python 的 Usenet 小组,很多人都在这里问问题。 我比较擅长帮别人解决技术问题,虽然,我只是 Python 新手,但仍开始尝试回答别人的问题。 只要看到自认能有效解决的问题,我就会回答,很快就有了不错的成绩!


Alex Martelli: ‘我比较擅长帮别人解决技术问题。


几个月后,Python 社区的一位高人给我起了个外号,马爹利机器人(Martelli Bot)。 众所周知,我是 Python 社区里第三个“机器人”,只有回答了超级多的问题,而且基本上都正确,才会被人称为机器人。 给我起外号的这位大神就是 Steve Holden,我很荣幸告诉大家,他是我的新书《Python in a Nutshell》第三版的合著者。




总之,这让我在 Python 社区里声名鹊起,也给了我联系 O'Reilly 出版社的勇气,我看到他们在为《Python in a Nutshell》这本书找作者,于是我问他们,“能不能让我尝试一下,或者找个经验更丰富的人一起写?


他们说,“你还要找人合作? 发个样章和大纲给我们吧。 ” 我就这样成了 Python 图书作者。


Alex Martelli: ‘我问他们,“能不能让我尝试一下,或者找个经验更丰富的人一起写? ”’


Driscoll: 您为什么会写《Python Cookbook》?


Martelli: 合著《Python Cookbook》一书时,我走了一点弯路,之前计划中的一位作者放弃了。 这本书很有意思,所有的解决方案都来自社区,只是为了切实有效地解决问题,才进行了改写。




我还在 ActiveState 网站上贡献了很多解决方案,并且乐此不疲! ActiveState 有点类似现在的 Stack Overflow。 Stack Overflow 对特定主题技术的问题与答案处理的非常到位。 我也这个网站的活跃用户: Python 标签下的发帖排行榜上,我排名第二,我还是首页荣誉榜的前 0.001%。


多说一句,Stack Overflow 的首席数据科学家发表过一个研究报告,介绍编程语言的流行度,该报告称,随着时间推移,基于 Stack Overflow 上的标签与问题,流行度增长最快的编程语言就是 Python。


Alex Martelli: ‘这项研究表明,2019 年初,Python 将会成为最流行的编程语言。


这项研究表明,2019 年初,Python 将会成为最流行的编程语言。 现在,Python 仅次于 Java 与 JavaScript,但是它已经超过了其它所有编程语言。 Perl 消失了,Ruby 也消失了,C# 排名下滑极快。 只有 Java 与JavaScript 还算坚挺,但是它们的变化幅度不大,只有 Python 突飞猛进。


Alex Martelli: ‘只有 Java 与JavaScript 还算坚挺,但是它们的变化幅度不大,只有 Python 突飞猛进。


Python 的基数已经非常大了,但仍能实现跨年增长 27%。 年初 (2017年) ,我看过《Spectrum》杂志一篇文章,宣称 Python 是今年最流行的编程语言。




该文章基于一些主观指标,比如岗位需求、课程、与研讨会等,而 Stack Overflow 的调研则是量化的、客观的,它的结论来自于超出想象的巨量数据。 虽然,两者都得出了同样的结论,不过 Stack Overflow 得出结论的量化手段更好、更精准。


Driscoll: 能介绍下作为 Python 图书作者有什么收获吗?


Martelli: 首先,你可能会觉得自己对一门语言了解的已经非常透彻了,但写书以后就会发现,这一认知十有八九是错误的。


运气好的话,可能会有一位有耐心、意志坚定的编辑与你一起合作,他的职责是了解这门语言,搞明白图书应该怎样排版印刷、读者如何从书中获取知识。


英语是我的第三语言,我从来没觉得自己的英语水平有多高。 但写作增进了我对英语,特别是书面英语的理解。


Alex Martelli: ‘这就是我们为什么要用编程语言: 因为自然语言有歧义,虽然强大,但却难懂。


自然语言是一种强大、内容丰富、却难于理解的沟通工具,这就是我们为什么要用编程语言: 因为自然语言有歧义,虽然强大,但却难懂。 想用自然语言极其精准地描述事物是不可能的。


Driscoll: 您能举个例子吗?


Martelli: 我曾在邮件列表看到过一个小故事,讲的是自动化与计算系统的风险。 这是一个用于在市区调度救护车而设计的形式化定义系统 (Formally-Defined System) ,显然,这是一项性命攸关的任务。


用自然语言最初写就的内容,也是其中一个限制条件是,不论何时,急救热线接到中风等急症电话后,救护车应该在 15 分钟之内 (即,这些病症的最佳急救时间之内) 赶到病发现场。


将这一自然语言正确转化为编程语言后,大部分情况都有所改进,但却出现了已经安排了救护车,可是救护车一直没有到达病发现场的个案,这种情况虽然很少,但实在是让人忧心。 这就是自然语言未能与形式逻辑 (Formal Logic) 相匹配的问题。


Alex Martelli: ‘这就是自然语言未能与形式逻辑(Formal Logic)相匹配的问题。


要知道,这是市区,交通堵塞。 救护车虽然可以鸣笛开路,但仍会被堵在路上。 如果出现延误,哪怕是 15 分多 0.01 秒,系统也会推断救护车已经到达,这是因为之前假设的前提是救护车总会在 15 分钟内到达。 所以如果假定救护车已经抵达了,系统就无需让该车继续前往,进而重新调度该救护车。


自然语言里,我们说必须在 15 分钟以内,并不是说一定在 15 分钟内,而是最好在 15 分钟内。 要表达的意思是,在此时间内到达至关重要,需要尽一切努力实现,确保救护车在此时限内到达。 但这并不意味着,如果 15 分钟没有到,就不需要救护车了,也不代表 15 分钟多 1 秒已经没用了。 虽然,这个结果不理想,但总比没有强!


Alex Martelli: ‘在编程语言里,断言(assertion)更简单: 说一就是一。


这只是自然语言引起歧义的一个小例子。在编程语言里,断言 (assertion) 更简单:说一就是一。如果说一不是一,就会触发异常。自然语言则不同,很多时候你会免不了想当然,这包括各种常识,还有同一词语在不同文化背景中的不同涵义。


Driscoll: 能介绍下您与读者的互动中最有意思的事情吗?


Martelli: 这种例子很多! 我可以介绍一些工作中遇到的乐子,总有同事问我,“我碰到一个特别奇怪的问题……” 这通常是他们刚写的程序或函数。


我会帮他们找出问题,并进行修复。 不是说我对 Python 的了解比他们更深,而是我擅长 找茬儿。 比如说,给我一篇有错别字的文章,不知道为什么,在阅读任何内容之前,我一眼就能看出错别字。 这对编程与电路设计而言,非常有好处。


以前,老有人问我,“我一直想问,你是写那本书的 Alex Martelli 吗? ” 我总是很高兴地回答,“是啊,就是我,那本书是我顺手写的。 ” 这让我一天都很开心。


Alex Martelli: ‘除了搞定问题,我也有虚荣心。


现在,这种事没以前那么多了,我在这个公司已经待了 12 年半了。 我的意思是,虽然这种事儿没什么实际意义,但是,嘿嘿! 除了帮别人搞定问题,我也有虚荣心。


Driscoll: 您觉得 Python 2.7 已经要被淘汰了吗?


Martelli: 《Python in a Nutshell》第三版里提出过这个问题。 书里曾经说过 Python 2.7 离被淘汰还远着呢,我现在仍然认为这是对的。


现在,生产环境中仍有大量的 Python 2.7 或 2.x 代码,并且这些 2.x 代码可以轻轻松松地就升级到 Python 2.7。 大家都知道 Python 2.7 就到此为止了,虽然,我笃定有不少企业会提供商业化支持,但到 2020 年, Python 软件基金会将停止对 Python 2.x 的官方支持。 所以,我们的书里对 Python 3、3.5、3.6 及未来新版的支持,就显得格外重要。


Alex Martelli: ‘Python 2.7 离被淘汰还远着呢。


现在就抛弃 Python 2.7 还为时过早,所以我们的书里包括了 Python 2.x 与 3.x 的内容。 如果读者只想了解其中一版的话,可能会觉得该书有些冗余,不过,我们会在下一版解决这个问题,到时某些内容将只支持 Python 3,不再支持 Python 2.7。


Python 2.7 的代码库非常庞大,仍有很多公司与产品还会滞留在 Python 2.7。 比如, YouTube 总的来说就是一个用 Python 开发的系统,有几百万行超级优化过的 2.7 版代码,说实在的,从商业角度上看,这种切换太难了。 要知道 YouTube 已经对这些代码优化 10 多年了,不可能上来就说,来吧,咱们重写下这几百万行代码。


如果切换到 Python 3 会把 YouTube 的速度减少 10%,这不仅要量化谷歌的成本,还要量化所有用户的成本,YouTube 的流量太大了,要考量性能降低对互联网带宽的占用会增加多少。 哪怕性能只降低 10%,都会让所有人的感受变得很糟。 这是不能容忍的! 这条路走不通,只能选择其他方向。


Driscoll: 那么 Python 作为一门编程语言,您觉得它现在有什么问题吗?


Martelli: 如果我能穿越回 Python 第一版发布之前,且只能对它做一项更改的话,我觉得是不要区别大小写。


Alex Martelli: ‘最优秀的编程语言都不区分大小写。 对我来说,这是最好的地方。


自从 C 语言在编程语言领域称霸以来,大家都觉得不区分大小写很怪。 但是,不管是 Fortran,还是 Pascal,甚至是 Ada,这些最优秀的编程语言都不区分大小写。 对我来说,这是最好的地方。


可能很多人都没有注意到,西方文化中,大小写的概念其实不是自然出现的,而是刻意人为的,这点可能很多人都意识不到。 大小写是在写作发展过程中出现的,这是我们文化里刻意制造出来的人造物。


我喜欢 Macintosh 的文件系统,比如新建一个名为大写 F-O-O (FOO) 的文件,它会按大写文件名存储文件。 但是,如果你用小写 foo 进行搜索,系统也会找到。 这种感觉与人类思维更相似。


Alex Martelli: ‘语音输入一下子就成了主流输入方式。


比如说语音识别系统。 语音输入一下子就成了主流输入方式,这是因为对着手机说话,比用屏幕上的小键盘打字要容易的多。 但用语音输入的时候,区分大小写让人很头疼,这就是我为什么说大小写是刻意的人造物! 自然拼读根本就不需要区分大小写。


Python 社区里希望 Python 不要区分大小写的人很少,与 Python 竞争的编程语言也都区分大小写,我估计这是当今所有流行语言共有的缺陷。


Python 的关键字也有些问题,这是 Python 与其它编程语言不同的地方,如果与其它语言一样的话,Python 将会是一门更好的编程语言。 Python 最常用的关键词,即定义函数的 def。 问题是 def 既不是关键词,也不是单词,它没有任何涵义! 你知道哪种编程语言做的最到位吗? JavaScript。


Driscoll: JavaScript 有何不同?


Martelli: JavaScript 里用的关键词是 function。 我想不明白为什么 Python 不用 function。 就算 function 要多输入 4 个字符,就算这得多敲好几下键盘! 但现在的编辑器不都支持自动补全了吗,是不是?


我明白,从技术上讲,def foo 与 function foo 没什么实际区别,但我更关注这些小小不言,却影响易用、易懂的小瑕疵。


Alex Martelli: ‘Python 可能是迄今为止,最好用、最好理解的编程语言。


我认为 Python 可能是迄今为止,最好用、最好理解的编程语言,所以这些小瑕疵在我看来就显得特别刺眼。


Python 的 range 只有一种,而且总是不包括上界,所以它的一致性更强,也更清晰。 其实这里用任意单词都是一样的,比如 def,就可以在设计时使用像 function 这样更易懂的单词。


如果觉得 function 这个词太长了,我觉得 fun 也不错,这个词多有意思。 不管怎么说,Python 这个名字毕竟是源于 Monty Python 这个喜剧片。 用 fun 作为 function 的缩写也可以表明 Python 编程很有趣 (这里的原文是 fun) 反正我觉得比 def 好。


Driscoll: 那您觉得 Python 最大的优势是什么?


Martelli: 在讲瑕疵的时候,我其实已经提到了。 Python 的优势在于清晰、一致性,这门语言的野心很大,就是,只用一种自然的、显性的方式做事情。


目前,Python 还未达成这一目标,举例来说,加法符合交换律,a+b 与 b+a 是表示汇总的两种方式, Python 无法改变这点。 但在阅读别人写的代码时,你依然会觉得更容易理解。


不管是 Python 老手,还是新人,都会不约而同地选择显性编程,因为 Python 往往是显性的。 就算不这么做,也可以告诉他们应该怎么写,而且很容易就能说服他们。 也许正是这种只用一种显性方式表达事物的野心,就是 Python 更清晰、更好用、更实用的原因吧。


Alex Martelli: ‘也许正是这种只用一种显性方式表达事物的野心,就是 Python 更清晰、更好用、更实用的原因吧。


我相信,Python 之所以能在你能想到的各个领域都得到充分应用,正是因为它的这种清晰与简洁的理念,Python 太容易上手了。


不是所 有人都像我学 Python 学得那么快。 我不认为是个经验丰富的程序员就能用一个周末就学会 Python,但这种事确实发生了。 就算 Python 里很多功能与其它编程语言类似,比如 Rust,我不敢想象有人能用一个周末就学会 Rust。


Driscoll: 您认为 Python 未来会如何发展?


Martelli: 无处不在! 你知道吗? 近年来最伟大的科研成果是发现了引力波。


PyCon 意大利上曾有一两个主题演讲,讲的是,Python 是控制所有采集数据设备的通用语言,最终这些数据显示两个黑洞相互撞击,并发出了引力波。


Alex Martelli: ‘正是 Python 在处理这些数据。


如果我没记错的话,碰撞后几秒钟所发出的引力波产生的能量,比宇宙中其它物质发出的能量加在一起都多。 这可是超大规模的数据量,而正是 Python 在处理这些数据。 这意味着, Python 负责监控这个强大到匪夷所思、眨眼之间发生的瞬时事件,对它的所有测量数据进行清洗、分析,找出其相关性,并对之进行解释,这本身就已经超级了不起了。 这次冲撞发生在几十亿年前,现在监测到的只是当时的引力波而已。 而这只是 Python 无处不在的一个例子。


科学,正是因此而令人着迷。 我和互联网巨头聊得越多,越发现这些公司使用其它编程语言开发其核心应用,只不过是因为它们的创始人只懂那些语言,但是因为并购了其它公司,它们不得不接纳 Python。


很多并购都出现在高科技领域。 大多数这些公司用的都是 Python,这正是它们成功的原因。 他们的效率是用其它语言的公司的两倍,甚至三倍。


Driscoll: 这么说,您认为更多公司开始使用 Python?


Martelli: 是的,很多大公司需要采用 Python 是因为必须接入它们并购公司的生产系统。 TensorFlow 的兴起,让我觉得 Python 必然会走在机器学习与人工智能领域的前沿。


即便 TensorFlow 的内核是用高度优化的 C++ 与汇编语言开发的,但其商业逻辑应用层用的是 Python,因为没必要耗费心力重新开发,所以 TensorFlow 的核心是 Python。


Alex Martelli: ‘TensorFlow 的兴起,让我觉得 Python 必然会走在机器学习与人工智能领域的前沿。


我很难想像还有哪些领域 Python 可能会永远都无法涉足。 不过,接下来探讨的这个领域是个例外: 嵌入式系统。 Python 对优化内存占用做的不够好。 嵌入式系统则要对内存精打细算。 然而,就算Python 自身解决不了,Python 的方言也能解决这个问题。


具体来说,解决物联网嵌入式设备的编程语言是一种名为 MicroPython 的 Python 方言。 我听说 BBC 给在校生配备了约上百万台运行 MicroPython 的设备。


Driscoll: MicroPython 是 Python 吗?


Martelli: 不完全是 Python,因为它必须为内容使用设置限制条件。


不要指望在价值两美元的设备上动态分配内存,这些设备的内存最多也就是 64K,就算多,也多不了哪儿去。 但在有限条件下仍可以实现动态分配,进行编程。


过去,Python 的一些实施特性阻止了它进入某些应用领域,正是这些特性饱受诟病。 据我所知,Larry Hastings 正在苦苦寻求移除全局解释锁 (GIL) 不管大家怎么想,GIL 与 90% 的应用不相关,但对另外 10% 要用更多芯片内核的应用而言,GIL 非常致命。


要把算法从 32 位优化成 64 位,移除 GIL 后效果会非常显著。 不过也不要着急,这些限制条件早晚会被移除的。


Alex Martelli: ‘在操作系统核心领域,Python 将来涉足的内容也不会今天多多少。


在操作系统核心领域,Python 将来涉足的内容也不会比今天多多少。 如果动态分配没问题,就可以用 Python,但这只是内核的很小一部分内容。 也许一些设备驱动对时间要求没那么严格,但我觉得,在绝大部分情况下,Python 只是运行在用户层面,而不是内核层面。


Driscoll:







请到「今天看啥」查看全文