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"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章