當前位置:
首頁 > 知識 > Python 太糟糕了?有個開發者總結了 8 個理由

Python 太糟糕了?有個開發者總結了 8 個理由

(給

Python開發者

加星標,提升Python技能


轉自:oschina


www.oschina.net/news/102889/8-reasons-python-sucks


有開發者發文表達了他覺得 

Python 不行的 8 大原因


作者對每一項「缺點」都進行了分析,全文洋洋洒洒,概括起來 8 個原因分別是:


1、版本不兼容


Python 3 與 Python 2 不完全兼容。作者以 Perl 語言和創造了世界上早期個人電腦的 Commodore 為例,分析了缺乏向後兼容性和分離版本是如何導致失敗的。


2、安裝問題


運行 apt、yum 與 rpm 等工具可以獲取並安裝大多數軟體包的最新代碼,但是在使用 apt-get install python 或者 pip install python 安裝 Python 的時候你不知道實際被安裝的是哪個版本,而這可能與你所需要的代碼不兼容。安裝時需要指定 Python 版本。


3、縮進規則


乍一看,Python 代碼似乎非常易讀,但是在大型代碼庫中並不是這樣。Pyhon 的四格縮進允許深度嵌套,但是嵌套太多層的話會導致代碼在文本編輯器中換行,變得混亂。而長函數和長條件操作可能使得難以匹配語法的開始與結束。給調試帶來了很大的困難。


4、代碼導入方式


Python 的導入方式 import 允許引入整個模塊、模塊的一部分或模塊中的特定函數。作者認為 Python 這種導入規則使得查找可導入的列表並不直觀。C 中可以直接查看 .h 頭文件,但是 Python 需要使用 python -v 列出引用所在位置,之後搜索該列表中每個目錄和子目錄中的每個文件。


此外,Python 的導入機制還允許用戶重命名導入的代碼,作者認為重命名模塊非常適合小腳本,但是對於長程序來說真的很糟糕,因為它會影響代碼的可讀性和長期支持。


而更糟糕的地方在於,對於大多數語言來說,導入代碼就只是導入代碼,如果存在帶有構造函數的全局對象,那麼一些語言會執行代碼,但這通常被認為是一種不好的做法。而許多 Python 模塊在導入期間就運行初始化函數,這導致你不清楚什麼正在運行,不知道它在做什麼,需要花很多時間來追蹤。


5、命名法


作者認為 Python 沒有使用通用並且專業的術語描述語言本身。比如在其它所有語言中,數組都稱為 arrays,但是在 Python 中,它被稱為 lists;關聯數組有時稱為 hash(Perl),但 Python 稱之為 dictionary。代碼庫命名方法也是這樣,像 PyPy、PyPi、NumPy、SciPy、SymPy、PyGtk、Pyglet 與 PyGame 這些庫,它們名稱中的「Py」有時放在開頭,有時又放在後邊,沒有統一。而類似 matplotlib、nose、Pillow 和 SQLAlchemy 的一些常見庫甚至直接放棄了「Py」這種命名約定。


作者將 Python 描述為「具有可怕且不一致的命名約定的庫的集合」。


6、怪癖


每種語言或多或少都有自己的怪癖,但是 Python 比其它語言都多。以字元串的操作為例,在 Python 中,單引號和雙引號之間沒有區別。但是,如果想要字元串跨行,則需要使用三引號 """string""" 或 ```string```;如果想使用二進位文件,那麼需要使用 b"binary" 或 r"raw";有時需要使用 str(string) 將字元串轉換為字元串,或使用 string.encode("utf-8") 將其轉換為 utf8。


7、按對象引用傳遞變數


大多數編程語言都按值傳遞函數參數,但是 Python 默認使用 pass-by-object-reference 參數執行函數,這意味著更改源變數可能會使引用值改變。這是程序、函數和和面向對象編程語言之間的重大差異之一,如果每個變數都是通過對象引用傳遞的,並且對變數的任何更改都會在任何地方更改引用,那麼可以直接使用全局變數來處理所有變數。但是全局變數的弊端是有目共睹的。


8、本地名稱

gcc -o screencapture.exe screencapture.c -lscreencapture

假如在使用名為「libscreencapture.so」的 C 庫測試截屏程序,可以調用自己的程序「screencapture.c」並編譯成「screencapture.exe」。


但是在 Python 中這麼做是不行的。Python 假定你首先要導入的是本地代碼,那麼如果你有一個名為「screencapture.py」的程序使用「import screencapture」,它將導入自己而不是系統庫。


作者最後還表示,通常他會辯證地去評論一個東西,他覺得 Python 確實有一些不錯的庫,比如 BeautifulSoup、NumPy 和 TensorFlow,但是他真的沒法列出關於 Python 其它好的方面,因為他真的認為 Python 很糟糕。


詳情查看原文:https://www.hackerfactor.com/blog/index.php?/archives/825-8-Reasons-Python-Sucks.html


推薦閱讀


(點擊標題可跳轉閱讀)


為什麼 Python 這麼慢?



Python 編碼錯誤的本質原因


Python 是慢,但我無所謂


覺得本文對你有幫助?請分享給更多人


關注「Python開發者」加星標,提升Python技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python開發者 的精彩文章:

Python 之父退位後,最高決策權花落誰家?
演算法與數據結構?看這篇就夠了

TAG:Python開發者 |