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