作者 | Arslan Mirza
編譯 | 徐傑承
作為一門簡潔易用、生态蓬勃且具有高泛用性的程式設計語言,Python一直以來都被不少人稱作“程式設計語言中的瑞士軍刀”。
尤其随着近來AI熱潮席卷全球,Python在程式設計語言圈中的地位也随之水漲船高,甚至一度被視作AI專用語言或大資料專用語言。
然而從語言特性出發,Python真的如人們所說的這般偉大麼?本文将為你闡明Python語言不那麼迷人的方面,而這些可能會讓你質疑你對這門流行語言的了解。
1、優點、缺點和争議點
不可否認,Python龐大的生态系統及其大量的第三方庫非常棒。大量的工具和資源選擇使其能夠成為需要快速解決問題或建立原型的開發人員的首選。
開發者A:“嘿,我需要建立一個網絡爬蟲,但我不知道如何開始。”開發者B:“沒問題!隻需使用 BeautifulSoup 和 Requests from Python。輕而易舉!”
然而盡管Python有着值得稱道的優勢,但其也有一些令人眼花缭亂的缺點。例如,約有400種格式化字元串的方法。這使得Python給人的感覺不像是一種簡潔易用的語言,而更像是希望将它的使用者繞暈。
開發者A:“為什麼在Python中格式化字元串的方法這麼多?!”開發者B:“我哪知道?我想你最好選擇一個并堅持下去。”
對于某些人來說,Python的強制縮進可能是一個很有争議的問題。雖然它确實在一定程度上加強了一緻性和可讀性,但也有不少人認為它有點過于嚴格。同樣,關于Python動态類型的争論也是一個經久不衰的話題,有些程式員喜歡動态類型的靈活,而另一些程式員則厭惡其所導緻的難以發現的錯誤。
開發者A:“我喜歡 Python 的強制縮進!這能使代碼變得更加簡潔。” 開發者B:“呃,我受不了了!感覺我的代碼就像是穿着一件緊身衣!”
2、特殊的陷阱
Python的三元表達式常因其非正常的排列而被人所诟病。雖然大多數語言遵循首先聲明條件的一緻原則,但 Python 的做法恰恰相反,這可能會導緻開發者在讀取複雜的表達式時出現混淆。
開發者A:“我無法了解Python的三元表達式。”開發者B:“呃,我想這就像試圖倒讀一個句子。”
Python 對單項元組的文法可能令人頭疼。如果你忘記了結尾的逗号,它就不再是元組,而是一個表達式。這可能會導緻難以察覺的錯誤并給開發者帶來挫敗感。
開發者A:“我又忘記了元組中的尾随逗号了!”
開發者B:“恭喜你,遇到了一個經典的Python陷阱。”
Python 的正規表達式比其他一些語言(如 JavaScript 或 Ruby)需要更多的樣闆檔案,這會使得它們更笨重、更不優雅。
開發者A:“用Python編寫正規表達式感覺就像再玩拼圖遊戲。”開發者B:“同意,它并不完全是Python優雅的縮影。”
Python “神奇”的雙下劃線屬性對于初學者來說可能看起來很晦澀難懂,但它們提供了一種強大的方法來自定義對象行為。然而不幸的是,他們神秘的本性經常讓新手感到困惑。
開發者A:“Python中所有這些雙下劃線屬性是怎麼回事?”開發者B:“它們被稱為'神奇方法'。旦是你必須掌握了它們的竅門,它們才會變得強大。”
3、錯誤處理和不可變之謎
Python 的錯誤處理方法鼓勵特定的錯誤處理,這被認為是一種好的做法。但是,在一個語句中捕獲所有錯誤及其消息在開發過程中可能不直覺且繁瑣。
開發者A:“為什麼我不能在 Python 中的單個語句中捕獲所有錯誤?” 開發者B:“這一切都是為了推廣最佳實踐。但是這在開發過程中确實會很煩人。”
Python 缺乏對不可變字典或複雜對象的原生支援,這些也是開發人員的主要痛點。雖然第三方庫可以填補這一空白,但它仍然是一個難以忽視的不便。
開發者A:“為什麼Python沒有内置對不可變字典的支援?”開發者B:“好問題,但我也不知道為什麼,隻能感謝第三方庫。”
4、社群文化沖突
一些Python社群中的成員經常對“Pythonic(優雅的、道地的、整潔的)方式”有着近乎狂熱的追求和堅持。這很容易在社群中形成一些氛圍,讓初學者或者意見不同的人感到沮喪或不自在。
開發者A:“我很沮喪,我經常被告知自己'不夠Pythonic'。”開發者B:“你需要專注于編寫幹淨、高效的代碼,讓别人認同你。”
優越感有時會滲透到Python社群,有些Python開發人員看不起其他語言或程式設計風格。當然,這種态度并不代表整個社群。許多Python開發人員欣賞建設性的批評,并願意向其他語言和範式學習。
開發者A:“為什麼有些Python開發人員表現得像Python是有史以來最好的語言?”開發者B:“在任何程式設計語言社群中,總會有某種程度的自豪感。但記住,最好的開發人員總是樂于學習和成長。”
5、Python是否被高估了
對于Python是否被高估了這個辯題,其實從Python的發展曆程中我們不難窺得一隅。
十五年前的Python依靠着Web開始逐漸占領市場,彼時Python的背後,是Django以及後來的Flask等Web架構。而在此後真正使Python走上主流的則是資料科學領域的興起。
從最初的NumPy、Scipy,再到後來真正将Python發揚光大的的Pandas、TensorFlow、PyTorch等。正是這些Google、Meta等大廠背書的資料科學架構的流行,才使得Python一步步走到了如今的地位。
然而細究之下不難發現,這些庫和架構,卻都不是用Python寫成的,而是C、C++甚至Fortran。時至今日,Python最核心的競争力依然是其“膠水”屬性,粘合了易用的前端和高性能的後端。
誠然,今天的Python 在資料科學方面累積的優勢的确難以被動搖,但在許多其他方面,Python的表現的依然無法超越甚至比肩各領域中的翹楚。
6、結語
歸根結底,雖然Python無疑是一款流行且功能強大的程式設計語言,但它并非沒有缺陷和争議點。通過研究Python的優勢,劣勢和争議點,我們能夠更準确的描繪出更平衡的語言視圖。
在探索其他程式設計語言和範式時,也必須意識到這些問題并保持開放的心态。
畢竟,最好的開發人員是那些能夠适應和學習的人,他們擁抱各種程式設計語言的優勢,同樣的,他們也能夠擁抱各種程式設計語言的劣勢。
參考連結:
https://levelup.gitconnected.com/python-is-not-a-great-programming-language-e0edfd513961
https://www.zhihu.com/question/266096929/answer/2383570933
來源: 51CTO技術棧