企业对机器学习的日益重视也使人们对Python的兴趣重燃。是什么让Python不同于其他语言?它独特的主要特征是什么?巨蟒要怎么做呢?在这一节中,我们的播客与来自Thoughtworks巴西的Luciano Ramalho聊天——他是Python书籍的著188bet宝金博app下载名作者——关于dunder方法、快速失败和即将到来的Fluent Python第二版中的新内容。
播客成绩单
Alexey博厄斯:
大家好,欢迎收看Thoughtworks技术播客。188bet宝金博app下载我的名字是Alexey,我是Thoughtworks巴西公司的技术负责人,这次我将和Mike Mason一起担任你们的主持人之一。你好,迈克。
迈克·梅森:
你好,Alexey,我是Mike,我是Thoughtworks的全球技术主管。188bet宝金博app下载
Alexey博厄斯:
这次我们很高兴邀请到卢西亚诺·拉马略。Luciano是O'Reilly Fluent Python书的作者。你好,卢西亚诺,能介绍一下你自己吗?
卢西亚诺Ramalho:
你好是的,我很自豪能成为巴西Thoughtworks在圣保罗办事处的首席顾问,大约四年半前,我加入了Thoug188bet宝金博app下载htworks,现在我正在编写我的书的第二版,并帮助Thoughtworks做其他事情,比如准备我们将于4月在圣保罗举行的盛大X会议以及其他事情。
Alexey博厄斯:
哦,太棒了。好吧,看起来是我们谈论Python的好时机,因为你正在编写这本书的第二版。现在,Python已经在我们自己的技术雷达中出现了好几次,其中许多都连接到了数据。为什么不从这里开始呢。所以Python在数据方面很受欢迎。为什么是这样,卢西亚诺?
卢西亚诺Ramalho:
这很有趣,因为我想了很多。我认为这可能是最近Python流行的主要原因还有另一件事,事实上它甚至在数据和Python或Python在数据领域如此流行之前,许多美国大学,像麻省理工学院等顶尖大学,采用Python作为他们在计算机科学程序和其他程序中教授的第一语言。所以我认为这两件事帮助了Python最近的流行。但是Python与数据的故事已经走得很远了。
卢西亚诺Ramalho:
事实上,就在我加入你们之前,我在看SWIG项目的历史。SWIG (S-W-I-G)是一个用于在c++和其他语言之间生成绑定的系统。它主要用于脚本语言,如Python、TECO、Ruby等,以便能够连接用c++编写的库。SWIG是由Dave Beasley创立的。Dave Beasley可能是世界上最著名的Python演讲者和书籍作者。Dave在95年创立了SWIG,在Python发布四年后,他在物理实验室工作。最初,他支持另一种语言,但后来在1996年1月,他发布了第一个支持Python的版本。说来话长。
卢西亚诺Ramalho:
无论如何,自从那发生了,有很多项目,科学项目最初在物理领域,但后来在其他领域,他们开始在Python和用c++编写的库之间做集成。就像我说的,那是很久以前的事了。然后突然发生的是,当这种新的人工智能方法出现时,我们现在称之为机器学习,它很大程度上是基于数学的,当它出现时,事实证明,Python已经具备了进行机器学习的一切必要条件,因为科学家们在前几年对该语言进行了研究。
卢西亚诺Ramalho:
我认为这是一种解释。事实上,人们需要做数值计算、统计、线性代数等的库已经到位,加上Python是一种容易掌握的语言,但它不是一种玩具语言。它是一种非常强大的语言,可以带你走很远。所以我认为这是它在机器学习中流行的两个因素。
迈克·梅森:
机器学习和所有这些你可以通过连接数据管道来做的东西以及Python中的所有这类东西是它最近变得更流行的原因,但我的意思是,除了数据之外呢?你说的是…你没有说这是一种容易学的语言,但你说这可能是一种友好的语言。
卢西亚诺Ramalho:
我一直觉得Python吸引我的一个地方是,人们用它做很多事情。还有其他脚本语言更局限于某些领域,但Python不是这样的。如果你参加一个大型的模式会议,比如PyCon US、EuroPython、PythonBrasil等等,你会看到关于各种不同事物的讨论。例如,物联网中发生了很多事情,对吧?有一种替代的Python解释器叫做MicroPython,它实际运行在微控制器上。举个例子,几年前BBC发起了一个名为Micro Bits的项目,这是一个带有LED显示屏和几个传感器的微型微控制器,有点像Arduino,但更容易上手。当它在英国出版时,他们发行了…我想英国的每一个十年级的学生都有一个微型比特。
卢西亚诺Ramalho:
微位是用Python编程的。还有像fruit这样的公司,这家美国公司生产非常有趣的电子设备和编程设备。他们在MicroPython的基础上构建了一个叫做秘密Python的环境,现在他们发布了一个又一个可以用Python编程的电路板。这是定义域的一个例子。但在生物技术领域,有很多工作已经做了好几年了。当然是网络编程,对吧?Web开发。重要的是要记住YouTube是建立在Python和最近的Instagram之上的。它基本上是从Python开始的。这两个项目是我们能够在网络规模上实现的,真正的全球规模,基本上是一个Python代码库。
Alexey博厄斯:
酷。好吧,这说明了广泛的应用和几个不同的应用。那语言本身呢,卢西亚诺?当然,你对这门语言充满热情。你喜欢的语言是什么?您认为Python有哪些独特的主要特性,使其与众不同?
卢西亚诺Ramalho:
好吧,有几件事。事实上,最近我在中国做了一个主题演讲,在巴西也做了一个主题演讲。它们被称为“蟒蛇之美”,我试着在里面挑选我最喜欢的东西。因此,其中一个事实是Python在语言中非常深入地内置了迭代器的概念。例如for循环。记得在Java中,在Java 1.5中有增强的for循环,也称为for-each循环。所以蟒蛇总是这样。for循环模式总是这样。
卢西亚诺Ramalho:
它可以和很多用这种语言实现的本地数据结构一起工作。但对于你来说,创建自己的数据结构也非常容易,它将与Python的for-each类型的for循环一起运行。
卢西亚诺Ramalho:
顺便说一下,当我正在研究这个话题说几年前,我发现这个想法的迭代器Python内置的语言通常是与一个叫产量的关键字,你把一个函数,它会使函数挂起并产生一个结果,然后恢复。这就是函数与for循环交互的方式。
卢西亚诺Ramalho:
不管怎样,这是伟大的芭芭拉·利斯科夫的另一项发明,你们知道吗?著名的Liskov替换原理的Barbara Liskov,她和她的博士生一起创造了一种语言叫做CLU, CLU是第一种真正的语言,它有内置迭代器和yield关键字的想法。所以Python做这个的方法和在CLU中做的很相似。
卢西亚诺Ramalho:
我喜欢的另一件事是,我认为Python很容易学,因为它的语法很简单。在Python文档中有一个很好的文档,我想它叫PEP 3000它是关于我们没有改变Python 3000的东西。就像永远,对吧?
迈克·梅森:
比如到了3000版,还是一样的。
卢西亚诺Ramalho:
是的,没错。确切地其中一点是解析器是一个LL(1)解析器。这是一个非常简单的解析器,这意味着代码开发人员希望受一个简单解析器的约束。因为如果解析器很简单,那么通常这意味着该语言也很容易阅读。当然,这是一种平衡,对吗?因为著名语言最简单的语法是Lisp语法,对吗?s-表达式的一种。但这实际上是一个非常简单的问题,很难阅读,因为所有这些看起来都一样,这就成了一个问题。
卢西亚诺Ramalho:
但是不管怎样,Python发现…我认为Guido van Rossum, Python的创建者,现在已经退休了。他有一种很好的感觉,能在可能过于极端的选择之间找到一条中间道路。语法很简单,所以很容易学习。另一个事实是,语言中有这种特殊方法的概念也被称为dunder方法因为它们在前面和后面声明了两个double scores,所以它们被称为dunder方法。
卢西亚诺Ramalho:
不管怎样,当你在语言中达到一定的使用水平时,那些愚蠢的方法,这基本上是我书的重点,让人们达到那个水平。当你理解了dunder方法是如何工作的,你就会意识到为什么语言是如此一致。因为,要实现可迭代的东西,你需要实现一个叫做dunder iter的方法。如果你想实现加法,加号运算符,那么你要实现一个叫做dunder add的方法,因为这些方法都很精细,它们在语言中已经很成熟了,每个人都知道如何以一种与传统方法一致的方式发展新事物
Alexey博厄斯:
就像这样,你可以使用通用语言结构它们会对不同类型的东西表现出适当的行为。但是你可以很容易地读懂它,因为语法很熟悉但是它的行为在特定情况下是应该的,对吧?
卢西亚诺Ramalho:
没错,是的。你知道美好的感觉,当你学习某种语言或框架,设计的很好,然后你开始猜测,然后大部分时间你是对的,哦,如果使用字符串,也许与这个工作。和它。它还可以处理来自数据库丛林查询的结果集。语言中有很多这样的东西。这是我非常喜欢的另一件事。对比,我不想bash任何语言,但我很喜欢去,但有一件事我觉得我当我编程小姐去,是去,例如,它有一种for - each语法是呼吁范围的目标,但这只适用于五内置类型的语言。你可以自己选择,让它和你自己的数据结构一起工作。
卢西亚诺Ramalho:
这让我很沮丧。在Python中,你不会感到约束,因为几乎所有内置的语言,你都可以在Python中模拟。
Alexey博厄斯:
好吧。所以你说by很容易学。你提到了三件事。首先是简单的语法。例如dunder运算符,给语言带来一致的感觉。还有第三个吗?
卢西亚诺Ramalho:
哦,关于dunder方法的事情是很重要的,要理解,学习Python的人不需要知道它们的存在,但他们已经从它们中受益了。因为这种语言是为开发库和框架的人设计的,所以他们可以很容易地为新手用户提供一致的api。所以新手用户根本不需要知道dunder方法或操作符重载,我们不希望人们…我们不想每天都这么做,但是是的。
卢西亚诺Ramalho:
,这就是我认为语言是非常精心设计的,因为它是简单的开始,然后你开始发现其他的事情,然后你得到其他见解,然后突然你成为的人,可以做任何事情的优点可以做语言因为它不让你这样做。
迈克·梅森:
你提到的一点是,当我们在播客上讨论什么的时候,你说这很快就会失败。
卢西亚诺Ramalho:
哦,是的。
迈克·梅森:
你能多说一点吗因为我认为这对人们可能有用?
卢西亚诺Ramalho:
哦,完全正确。是 啊所以我一直是所谓脚本语言的忠实粉丝。我不太喜欢那个词,因为它通常以贬义的方式使用。但无论如何,我一直是非常高级的动态语言的粉丝。他们中的很多人都有一个问题,就是有时候bug是隐藏的,比如说,因为打字很弱。所以JavaScript有一个疯狂转换的问题。所以你必须知道你永远不能相信equals操作符。你必须使用三重相等,否则你会被打败,对吗?
卢西亚诺Ramalho:
现在,与我学过的几乎所有其他脚本语言相比,Python有一种更严格的哲学,我们称之为快速失败。举个例子,当你从字典中检索一个值?你提供一个键,然后你想从字典中取回一个值或者从哈希,映射,或者任何你叫它的地方。无论如何,现在几乎所有语言都有这种限制,但在Python中,如果键不存在,它会引发异常。其他语言会给你一些未定义的东西或者一些默认值,比如none,这有时会让你以后很头疼因为你期望的东西,它不存在,而你得到了这个值,所以你没有得到一个错误,然后你必须以后才能弄清楚。
卢西亚诺Ramalho:
另一个例子叫做splat算子或解包。当你有几个值要并行分配或当你去传递一个函数的参数列表,其他语言,有时如果你传递多个参数会默默地丢弃,如果你没有足够的参数传递,然后如果你分配一些默认值未定义或没有剩余的参数,Python不会做这些事情。在其他语言允许错误通过的地方,它在许多方面都是严格的。所以我认为这很好。这确实是一种乐趣,因为您正在使用这种高效的动态语言,但由于这个特性,许多bug很容易被捕获。
Alexey博厄斯:
酷。所以你和科学界谈论了一点Python的历史以及一些你喜欢的基础知识,它们很酷,让使用Python成为一种乐趣。那新的,闪亮的卢西亚诺呢?Python中有什么很酷的东西?有什么新鲜事吗?
卢西亚诺Ramalho:
对于我们这些在大系统中为我们的客户工作的人来说,对于Thoughtworks的客户来说,有一件事可能会受到很多人的欢188bet宝金博app下载迎,那就是在语言中引入静态类型。这是一个可选的东西,它实际上非常类似于TypeScript和Dart的工作方式,谷歌在他们的flutter框架中使用的新语言。这个想法是,你不会被迫声明类型,类型错误不会在运行时被捕获,类型注释在运行时没有影响。但是想法是你把这些注释放在你的。它们可以通过查看源代码来帮助您的ID检测错误。你也可以写上。有命令行类型检查器,比如我的PI,还有一个来自微软,另一个来自谷歌。
卢西亚诺Ramalho:
一些大公司现在有自己的类型检查器,但它们现在都是一致的,因为语言采用了标准的语法和语义来做这件事。你可以把我的Pycheck放到你的管道中,在提交之前对源代码做一个静态类型检查。所以我认为在我们Thoughtworks工作的背景下,这将是非常重要的。188bet宝金博app下载
卢西亚诺Ramalho:
另一件事是,Python中围绕数据和科学计算的生态系统以及分析等等,从未停止让我惊讶。这是不可思议的。最让人印象深刻的是Dask项目,D-A-S-K。所以Dask是一种用API编程的方法它和NumPy API非常相似每个使用Python的人都知道。所以它们模仿了NumPy API的一部分,它们被抛出等等。但它们的方式是,你可以将计算分布在机器集群上。
卢西亚诺Ramalho:
我看见一个演示的谈话在圣保罗和超级令人印象深刻是因为开了一家Jupyter笔记本的人,然后在做Dask计算然后输入一个特殊的命令Jupyter笔记本屏幕突然一大块被仪表板显示在实时计算中发生the nodes. What nodes were idle, what nodes were busy so that you could reconfigure, maybe you had a pipeline with a several steps of map reduce for instance, and then you could graphically see that some steps needed more machines and other steps you could reduce the number of machines.
卢西亚诺Ramalho:
这就是Dask,它给人留下了深刻的印象,而且都是开源的。我真正喜欢Python的一点是,它是一种真正的核心开源语言。在Python的历史上,从来没有一个庞大的公司支持者控制它。因此,这是一个社区项目,治理非常透明,当然,分析和科学计算领域的人们一直都有自己的声音。这就是为什么多年来这种语言也适应了他们的需要。但我认为这是一个很好的例子,说明了真正的开源治理是有效的。
迈克·梅森:
这是很酷。
卢西亚诺Ramalho:
是的。
迈克·梅森:
这些都是现在令人兴奋的事情。未来呢?您在前面提到了Python版本3000。Python的新版本会出现吗?我们需要注意吗?
卢西亚诺Ramalho:
从Python2到Python3的转换非常痛苦。我在1998年开始使用Python,当时是Python 1.5。所以我经历了从1.5到2.0的变化,这非常顺利。几乎大多数程序只是继续工作,没有任何问题。但在Python3中,他们决定修复一些非常基本的问题。他们想要解决的最基本的问题是,在不破坏向后兼容性的情况下,重新组织该语言中对Unicode的支持,因为Python中的字符串、默认字符串文本不是Unicode,并且Python 2.7中有一种替代Unicode类型是可以的,但这并不是违约,所以人们错过了。
卢西亚诺Ramalho:
不管怎样,有了这个改变,有了需要打破很多东西的改变,他们决定做其他的改变,这花了大约10年的时间……是的,巨蟒2.7持续了10年。它是在去年一月冻结的。从1月份开始,社区不再支持Python 2.7。我认为很多供应商仍然会支持它,比如Red Hat和其他供应商,因为它没有庞大的安装基础。但无论如何,
迈克·梅森:
和是什么
卢西亚诺Ramalho:
...因为……去做吧。
迈克·梅森:
为什么人们被困了这么久?我们有这些库,框架和代码库
卢西亚诺Ramalho:
这很有趣。第一件事花了很长时间,人们需要……如果我是一个应用程序开发人员,我需要我所有的依赖都与Python 3兼容,对吗?所以我不得不等待。所以,我想说,对于主要项目,甚至整个NumPy库,SciPy库和Django等,他们花了大约五年的时间,才能够发布同时支持Python 2.7和Python 3的版本。但现在,当你有一个生产系统,你有一个。是的,也许,
迈克·梅森:
你认为……对不起,你认为商业语言供应商在这方面做得更好吗?看起来……其实我也不知道答案,我只是好奇。例如,微软在让人们跟上c#版本方面做得很差,或者Java在鼓励人们转向新版本方面做得更好。我想这取决于是否有一个重大的突破性的变化,就像你所说的。
卢西亚诺Ramalho:
嗯,我不知道。我不懂这些语言那么紧密了,但是让我说这整件事情,我认为这是我们传递,令人惊讶的是,语言中幸存下来,甚至在那些年里增长了很多麻烦,最近我在谈论,在推特上与其他一些人实际上引用,Windu在我的一条推特上,然后Windu过来说可能根本不会有Python 4,因为没有这个必要。我们要做增量发行,然后我们可以使用。现在3.9在alpha中,接下来是3.10和3.11,以此类推。所以我认为我们不会有。社区受到了足够的创伤,不会再犯同样的错误。是的。
Alexey博厄斯:
好了,好了。那本书《卢西亚娜》呢?所以你在写你那本很受欢迎的Fluent Python书的第二版。我们可以提一下,对吧?这不是什么秘密吧?
卢西亚诺Ramalho:
不不,这不是秘密。
Alexey博厄斯:
好的,很好。那为什么要再版呢?新版里有什么?你在做什么?
卢西亚诺Ramalho:
嗯,第一版是在2015年发布的,所以尽管我当时专注于Python 3,当时是Python 3.4,但有一些东西是大多数……几乎书中的每一行代码,在第一版中仍然有效,除了有一部分是asyncio库,因为它在当时是临时的。所以我冒着风险报道它,因为它是一个热门的新事物,但因为它是临时的,每个人都知道API会改变,它确实改变了。语法也变得更好了。他们引入了两个关键字,async和await,它们与c#中的相似关键字非常相似。所以他们引入了这些影响,然后让所有的异步编程更具可读性。这是做更新的一个主要原因。当然,全新的类型主题在当时并不存在。所以我认为这些是第二版中最重要的变化,包括类型提示和谈论做asyncio的新方法。
迈克·梅森:
对于那些可能读过第一版的人,它叫Fluent Python,告诉我更多关于你在书中的方法。
卢西亚诺Ramalho:
是的,所以这本书的目标读者是已经了解Python的人。好吧?是的,它实际上是由我过去给懂Python的人讲授的一系列叫做Python的课程演变而来的。所以,这个想法是,你知道Python,你每天都在使用它,但你真的充分利用了它吗?因为成为一门容易学的语言意味着有时你不会深入学习它,因为你可以用简单的方法来做事情,但通常你会带着浓重的口音使用另一种语言,并错过其他语言的东西。但你不知道在Python中还有其他东西以不同的方式做同样的事情。这就是工作的重点,这就是为什么它被称为Fluent Python。但这是- - - - - -
迈克·梅森:
我- - - - - -
卢西亚诺Ramalho:
是的,去吧。
迈克·梅森:
我可以联系。我确信我所有的Ruby代码看起来都像Java。认识鲁比的人
卢西亚诺Ramalho:
确实,这是一本关于惯用Python的书。我认为这是市场上的第一本书。我不知道是否……如果市场的第一本书,覆盖特殊方法在第一章,因为我假设您知道Python,这是如果你不知道,你需要知道,这样你得到一个更深的理解的语言和为什么它是如此一致。它从特殊的方法开始,然后一直到元编程元类。最后会变得很奇怪。我真的很喜欢写作。这是我职业生涯中最喜欢的事情之一。
迈克·梅森:
是啊,我们很高兴你这么做因为那样我们就能得到那些精彩的书,所以。
卢西亚诺Ramalho:
我想发自内心地感谢Thoughtworks对我的支持,因为我在Thoughtworks做兼职工作,因为他们也让我写这本书,所以这真的很棒。188bet宝金博app下载
Alexey博厄斯:
好的,卢西亚诺,非常感谢。我想这集快结束了。这是一次很好的谈话,很高兴你能和我们在一起。非常感谢。
卢西亚诺Ramalho:
非常感谢迈克和阿列克谢·博厄斯。和你谈话很愉快。
迈克·梅森:
谢谢你曾。
卢西亚诺Ramalho:
再见。
Alexey博厄斯:
感谢大家的加入,如果你对我们有任何反馈,不要犹豫,联系或在你喜欢的平台上留下评价或评论。谢谢大家的聆听。再见。
Neal Ford:
在下一集Thoughtworks技术播客中。188bet宝金博app下载我们的两位同事普拉萨纳(Prassana)和巴拉尼(Bharani)将与我们一起讨论可观察性和监控性之间的区别,以及一些关于什么该做,什么不该做的好主意。欢迎收看下一集。