有開發(fā)者發(fā)文表達(dá)了他覺得Python 不行的 8 大原因。
作者對每一項(xiàng)“缺點(diǎn)”都進(jìn)行了分析,全文洋洋灑灑,概括起來 8 個(gè)原因分別是:
1、版本不兼容
Python 3 與 Python 2不完全兼容。作者以 Perl 語言和創(chuàng)造了世界上早期個(gè)人電腦的 Commodore 為例,分析了缺乏向后兼容性和分離版本是如何導(dǎo)致失敗的。
2、安裝問題
運(yùn)行 apt、yum 與 rpm 等工具可以獲取并安裝大多數(shù)軟件包的最新代碼,但是在使用 apt-get install python 或者 pip install python 安裝 Python 的時(shí)候你不知道實(shí)際被安裝的是哪個(gè)版本,而這可能與你所需要的代碼不兼容。安裝時(shí)需要指定 Python 版本。
3、縮進(jìn)規(guī)則
乍一看,Python 代碼似乎非常易讀,但是在大型代碼庫中并不是這樣。Pyhon 的四格縮進(jìn)允許深度嵌套,但是嵌套太多層的話會導(dǎo)致代碼在文本編輯器中換行,變得混亂。而長函數(shù)和長條件操作可能使得難以匹配語法的開始與結(jié)束。給調(diào)試帶來了很大的困難。
4、代碼導(dǎo)入方式
Python 的導(dǎo)入方式import 允許引入整個(gè)模塊、模塊的一部分或模塊中的特定函數(shù)。作者認(rèn)為 Python 這種導(dǎo)入規(guī)則使得查找可導(dǎo)入的列表并不直觀。C 中可以直接查看 .h 頭文件,但是 Python 需要使用 python -v 列出引用所在位置,之后搜索該列表中每個(gè)目錄和子目錄中的每個(gè)文件。
此外,Python 的導(dǎo)入機(jī)制還允許用戶重命名導(dǎo)入的代碼,作者認(rèn)為重命名模塊非常適合小腳本,但是對于長程序來說真的很糟糕,因?yàn)樗鼤绊懘a的可讀性和長期支持。
而更糟糕的地方在于,對于大多數(shù)語言來說,導(dǎo)入代碼就只是導(dǎo)入代碼,如果存在帶有構(gòu)造函數(shù)的全局對象,那么一些語言會執(zhí)行代碼,但這通常被認(rèn)為是一種不好的做法。而許多 Python 模塊在導(dǎo)入期間就運(yùn)行初始化函數(shù),這導(dǎo)致你不清楚什么正在運(yùn)行,不知道它在做什么,需要花很多時(shí)間來追蹤。
5、命名法
作者認(rèn)為 Python 沒有使用通用并且專業(yè)的術(shù)語描述語言本身。比如在其它所有語言中,數(shù)組都稱為 arrays,但是在 Python 中,它被稱為 lists;關(guān)聯(lián)數(shù)組有時(shí)稱為 hash(Perl),但 Python 稱之為 dictionary。代碼庫命名方法也是這樣,像 PyPy、PyPi、NumPy、SciPy、SymPy、PyGtk、Pyglet 與 PyGame 這些庫,它們名稱中的“Py”有時(shí)放在開頭,有時(shí)又放在后邊,沒有統(tǒng)一。而類似 matplotlib、nose、Pillow 和 SQLAlchemy 的一些常見庫甚至直接放棄了“Py”這種命名約定。
作者將 Python 描述為“具有可怕且不一致的命名約定的庫的集合”。
6、怪癖
每種語言或多或少都有自己的怪癖,但是 Python 比其它語言都多。以字符串的操作為例,在 Python 中,單引號和雙引號之間沒有區(qū)別。但是,如果想要字符串跨行,則需要使用三引號 """string"""或 ```string```;如果想使用二進(jìn)制文件,那么需要使用b'binary' 或 r'raw';有時(shí)需要使用 str(string) 將字符串轉(zhuǎn)換為字符串,或使用 string.encode('utf-8') 將其轉(zhuǎn)換為 utf8。
7、按對象引用傳遞變量
大多數(shù)編程語言都按值傳遞函數(shù)參數(shù),但是 Python 默認(rèn)使用 pass-by-object-reference 參數(shù)執(zhí)行函數(shù),這意味著更改源變量可能會使引用值改變。這是程序、函數(shù)和和面向?qū)ο缶幊陶Z言之間的重大差異之一,如果每個(gè)變量都是通過對象引用傳遞的,并且對變量的任何更改都會在任何地方更改引用,那么可以直接使用全局變量來處理所有變量。但是全局變量的弊端是有目共睹的。
8、本地名稱
gcc-oscreencapture.exescreencapture.c-lscreencapture
假如在使用名為“l(fā)ibscreencapture.so”的 C 庫測試截屏程序,可以調(diào)用自己的程序“screencapture.c”并編譯成“screencapture.exe”。
但是在 Python 中這么做是不行的。Python 假定你首先要導(dǎo)入的是本地代碼,那么如果你有一個(gè)名為“screencapture.py”的程序使用“import screencapture”,它將導(dǎo)入自己而不是系統(tǒng)庫。
作者最后還表示,通常他會辯證地去評論一個(gè)東西,他覺得 Python 確實(shí)有一些不錯(cuò)的庫,比如 BeautifulSoup、NumPy 和 TensorFlow,但是他真的沒法列出關(guān)于 Python 其它好的方面,因?yàn)樗娴恼J(rèn)為 Python 很糟糕。
-
傳遞函數(shù)
+關(guān)注
關(guān)注
0文章
103瀏覽量
14555 -
python
+關(guān)注
關(guān)注
58文章
4879瀏覽量
90161
原文標(biāo)題:Python 太糟糕了?有個(gè)開發(fā)者總結(jié)了 8 個(gè)理由
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
成功的軟件開發(fā)者需要掌握人際技能的3個(gè)原因
開發(fā)者福音!谷歌云APP引擎開始支持Python 3.7
OpenHarmony開源開發(fā)者成長計(jì)劃-職業(yè)開發(fā)者挑戰(zhàn)賽 開發(fā)資料匯總
喜報(bào)|HarmonyOS開發(fā)者社區(qū)連獲業(yè)內(nèi)獎項(xiàng),持續(xù)深耕開發(fā)者生態(tài)
谷歌不止有開發(fā)者大會 另外還帶來了開發(fā)者網(wǎng)站
iPhone 8發(fā)布了 2大原因看空蘋果
Python 轉(zhuǎn)向 Go語言的9大原因和3大缺點(diǎn)
2018年受到眾多開發(fā)者關(guān)注的7個(gè)Python類庫
一位開發(fā)者講述了他無法忍受Python的8大原因
Python開發(fā)者最容易忽略的10個(gè)要點(diǎn)
2021 OPPO開發(fā)者大會:異構(gòu)計(jì)算開發(fā)者價(jià)值
2021 OPPO開發(fā)者大會:小布開發(fā)者平臺生態(tài)
2021 OPPO開發(fā)者大會:OPPO滿足開發(fā)者需求
如何使用lambda表達(dá)式提升開發(fā)效率?
華為云開發(fā)者桌面全新發(fā)布 CodeArts IDE for Python,極致優(yōu)雅云原生開發(fā)體驗(yàn)
開發(fā)者發(fā)文表達(dá)了他覺得 Python不行的8大原因
評論