2021年Python的好与坏

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"摘要"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python在许多领域都是首选语言,包括编程入门、机器学习、数据科学以及数据工程等。在这篇文章中,我想聊下Python最大的优势和不足,以不足为主,因为这些问题已经存在了许多年,而且其中有些导致了很多问题。这篇文章对Python的评价看起来非常负面。但我仍然喜欢并每天使用Python,并希望它能有所改进并不断变好。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"正文"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"},{"type":"color","attrs":{"color":"#333333","name":"user"}},{"type":"strong"}],"text":"本文最初发布于"},{"type":"text","marks":[{"type":"italic"},{"type":"strong"}],"text":"Shantnu Tiwari的个人"},{"type":"text","marks":[{"type":"italic"},{"type":"color","attrs":{"color":"#333333","name":"user"}},{"type":"strong"}],"text":"博客,经原作者授权由InfoQ中文站翻译并分享。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"前言"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在这篇文章中,我想聊下Python最大的优势和不足,以不足为主,因为这些问题已经存在了许多年,而且其中有些导致了很多问题。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Python闪光之处"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"现在,Python在许多领域都是首选语言——编程入门、机器学习、数据科学以及数据工程(包括清理数据、提取数据并存储为一个容易阅读的格式,等等)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在有些领域,Python并不是Number One,但它是一个强有力的竞争者。Web应用开发,尤其是后端部分。测试和自动化,也主要是后端,还有服务器应用程序。我之前就职的一家初创公司使用Powershell和C做自动化测试,这引发了很大的分歧,直到我介入,宣布我们将使用Python。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你要在Linux服务器上做什么事情,如果脚本行数超过几百行,那么大多数人的选择会是Python而不是Bash。在企业里,任何bash脚本超过20行,评审人员就会抱怨;我不是在指责他们。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"X是一个很棒的库,但如果它不支持Python,我连试也不会试"},{"type":"text","text":"。像这样的评论,我见过许多次了。不支持Python的应用可是在自找麻烦。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,如果你2021年要学习编程,或者是学习一项新技能,那么Python是一个不错的选项。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Python糟糕之处"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"1)Python很难安装,经常需要碰运气"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"每次我这样说的时候都会遭到反驳。我之前在一个私人小组中分享了这篇文章之前的一个版本,最多的一种评论是:"},{"type":"text","marks":[{"type":"italic"}],"text":"我从来没有遇到过这个问题,你确定这不是你自己的想象?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Reddit\/HN上的有些人更粗鲁:"},{"type":"text","marks":[{"type":"italic"}],"text":"你甚至不会安装Python或某个版本,你一定是个傻瓜"},{"type":"text","text":"。有一个人告诉我,非常非常严肃:"},{"type":"text","marks":[{"type":"italic"}],"text":"你只要学会使用virtualenv,你所有的问题就都不存在了"},{"type":"text","text":"。好吧,谢谢,好像我没那样想过是的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有那么一会儿,我真以为"},{"type":"text","marks":[{"type":"italic"}],"text":"也许是我傻"},{"type":"text","text":"。毕竟,不会所有那些聪明人都错了,对吧?不对!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"只要花几分钟搜索一下就会发现,其他许多人也遇到了同样的问题:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/5f\/49\/5f756f45d9fdd6f77681234b8b7f7c49.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/72\/a3\/72de96ef80a33616e11e52eb804b66a3.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/3e\/53\/3eab7247ab6a4ef27c912430a10c8153.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/85\/54\/85b41159db044f12ca57c0354cea7b54.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那么,为什么会存在这个问题?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我发现,如果你使用的是非常标准的Web开发库,如Flask\/Django,它们主要是纯Python代码,那么什么问题也没有。这就是为什么人们会说,而且是非常严肃地说,Python很容易安装。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这个问题会在以下3个情况下出现:"}]},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"数据科学、视频\/图像处理、游戏或其他有大量C\/C++代码的库"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"试图将Python代码给非开发人员甚或是非Python开发人员"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"像我一样喜欢尝试许多新库,只是为了学习新东西"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"就在两周前,我升级了一个库(我需要使用一个比较新的特性;另见下文的向后兼容性),原本可以正常运行的代码就不正常了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我正在试用一个新的游戏库——但就是安装不到Windows上,在Linux上却没问题。在Python的世界里,Windows仍然是一个二等公民。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更糟糕的是,我在使用"},{"type":"text","marks":[{"type":"italic"}],"text":"pip install"},{"type":"text","text":"和"},{"type":"text","marks":[{"type":"italic"}],"text":"conda install"},{"type":"text","text":"时遇到了不同的错误。Python版本不同,错误也不同——我说的是小版本,如"},{"type":"text","marks":[{"type":"italic"}],"text":"3.7 vs 3.8"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我都不记得自己被迫放弃了多少优秀的库\/项目,只因为安装不上。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你想与Python新手分享自己的代码,那简直是噩梦。当我在写"},{"type":"link","attrs":{"href":"https:\/\/new.pythonforengineers.com\/books","title":null,"type":null},"content":[{"type":"text","text":"书"}]},{"type":"text","text":"时,我发现,与其帮助人们安装Python,还不如提供一个什么都装好了的5GB的虚拟机,那样更简单(许多其他的作者也是这样做的,我的虚拟机文件夹一度有60到80GB,全都是针对Python的)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python开发者嘲笑JavaScript和NodeJs平台让人凌乱,但Python与Node相比有过之而无不及。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"2)只有一种方法和有200种方法"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python之禅中有这样一句话,我不知道为什么人们不再说:"}]},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"尽量找一种最好是唯一一种明显的解决方案。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2021年:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你想创建独立的环境?很好!你可以使用virtualenv、virtualenv wrapper、pipenv、poetry、conda。有点关系,但应用场景稍有不同:pyenv和pipx。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"安装Python或库?你可以使用pip install、apt install、brew install,它们会变着法把你的系统搞乱。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"随时会有库进来搞乱你的系统。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"现在,Python精英人士会居高临下地说:"},{"type":"text","marks":[{"type":"italic"}],"text":"嘿,伙计,你应该使用*#@%等来简化自己的工作"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但初学者一个都不知道(说真的,难道他们真要为了测个脚本去学习那些东西吗?)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有10多年开发经验的程序员(不过是Python新手)也会为此纠结不已。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/7d\/ba\/7d167ff4acb4b3c519621bf1267126ba.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"3)今天写好的代码明天就被破坏了——向后兼容性就是个笑话"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"曾经有一名Java程序员攻击我说(好吧,他是在抱怨,但他向我这边看,所以我就认为他是针对我):"}]},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"我用Java 7写的这些代码(当时已经有9年了),到现在还能正常运行。而用Python,上周的代码今天就不能用了。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我都准备好和他决斗了。但我突然就停住了,这家伙说得很有道理。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这个问题主要存在于库中,但这种"},{"type":"text","marks":[{"type":"italic"}],"text":"快速变化且有破坏性"},{"type":"text","text":"的东西令人非常恼火。我看不出来这些库有什么理由重写\/重构。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"是的,我明白。有时候,你不得不重构代码。代码是由不取得报酬的志愿者维护的,诸如此类。但我希望社区能更严肃地对待向后兼容性。所有 \"成熟 \"的语言都是如此。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"小结"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我知道,这篇文章对Python的评价看起来非常负面。但我仍然喜欢并每天使用Python,并希望它能有所改进并不断变好。以至于只要有Rust程序员想开口,就会有十几个Python程序员跳出来说,"},{"type":"text","marks":[{"type":"italic"}],"text":"其实你应该用Python重写"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"简而言之:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用Python找工作很不错;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用Python编程也很有趣,而且效率极高;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"问题是安装Python库,以及分发代码供其他人使用。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"查看英文原文:"},{"type":"link","attrs":{"href":"https:\/\/new.pythonforengineers.com\/blog\/python-in-2021-the-good-the-bad-and-the-ugly\/","title":null,"type":null},"content":[{"type":"text","text":"Python in 2021: The Good, The Bad, and the Ugly"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章