作者 | 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