自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python不是一種偉大的編程語言

原創(chuàng) 精選
開發(fā) 前端
雖然Python無疑是一款流行且功能強(qiáng)大的編程語言,但它并非沒有缺陷和爭(zhēng)議點(diǎn)。通過研究Python的優(yōu)勢(shì),劣勢(shì)和爭(zhēng)議點(diǎn),我們能夠更準(zhǔn)確的描繪出更平衡的語言視圖。

作者 | Arslan Mirza

編譯 | 徐杰承

作為一門簡(jiǎn)潔易用、生態(tài)蓬勃且具有高泛用性的編程語言,Python一直以來都被不少人稱作“編程語言中的瑞士軍刀”。

尤其隨著近來AI熱潮席卷全球,Python在編程語言圈中的地位也隨之水漲船高,甚至一度被視作AI專用語言或大數(shù)據(jù)專用語言。

然而從語言特性出發(fā),Python真的如人們所說的這般偉大么?本文將為你闡明Python語言不那么迷人的方面,而這些可能會(huì)讓你質(zhì)疑你對(duì)這門流行語言的了解。 

1、優(yōu)點(diǎn)、缺點(diǎn)和爭(zhēng)議點(diǎn)

不可否認(rèn),Python龐大的生態(tài)系統(tǒng)及其大量的第三方庫非常棒。大量的工具和資源選擇使其能夠成為需要快速解決問題或創(chuàng)建原型的開發(fā)人員的首選。

開發(fā)者A:“嘿,我需要建立一個(gè)網(wǎng)絡(luò)爬蟲,但我不知道如何開始。”開發(fā)者B:“沒問題!只需使用 BeautifulSoup 和 Requests from Python。輕而易舉!” 

然而盡管Python有著值得稱道的優(yōu)勢(shì),但其也有一些令人眼花繚亂的缺點(diǎn)。例如,約有400種格式化字符串的方法。這使得Python給人的感覺不像是一種簡(jiǎn)潔易用的語言,而更像是希望將它的使用者繞暈。

開發(fā)者A:“為什么在Python中格式化字符串的方法這么多?!”開發(fā)者B:“我哪知道?我想你最好選擇一個(gè)并堅(jiān)持下去。” 

對(duì)于某些人來說,Python的強(qiáng)制縮進(jìn)可能是一個(gè)很有爭(zhēng)議的問題。雖然它確實(shí)在一定程度上加強(qiáng)了一致性和可讀性,但也有不少人認(rèn)為它有點(diǎn)過于嚴(yán)格。同樣,關(guān)于Python動(dòng)態(tài)類型的爭(zhēng)論也是一個(gè)經(jīng)久不衰的話題,有些程序員喜歡動(dòng)態(tài)類型的靈活,而另一些程序員則厭惡其所導(dǎo)致的難以發(fā)現(xiàn)的錯(cuò)誤。

開發(fā)者A:“我喜歡 Python 的強(qiáng)制縮進(jìn)!這能使代碼變得更加簡(jiǎn)潔?!?nbsp;開發(fā)者B:“呃,我受不了了!感覺我的代碼就像是穿著一件緊身衣!” 

2、特殊的陷阱

Python的三元表達(dá)式常因其非常規(guī)的排列而被人所詬病。雖然大多數(shù)語言遵循首先聲明條件的一致原則,但 Python 的做法恰恰相反,這可能會(huì)導(dǎo)致開發(fā)者在讀取復(fù)雜的表達(dá)式時(shí)出現(xiàn)混淆。

開發(fā)者A:“我無法理解Python的三元表達(dá)式?!遍_發(fā)者B:“呃,我想這就像試圖倒讀一個(gè)句子。” 

Python 對(duì)單項(xiàng)元組的語法可能令人頭疼。如果你忘記了結(jié)尾的逗號(hào),它就不再是元組,而是一個(gè)表達(dá)式。這可能會(huì)導(dǎo)致難以察覺的錯(cuò)誤并給開發(fā)者帶來挫敗感。

開發(fā)者A:“我又忘記了元組中的尾隨逗號(hào)了!” 

開發(fā)者B:“恭喜你,遇到了一個(gè)經(jīng)典的Python陷阱。” 

Python 的正則表達(dá)式比其他一些語言(如 JavaScript 或 Ruby)需要更多的樣板文件,這會(huì)使得它們更笨重、更不優(yōu)雅。

開發(fā)者A:“用Python編寫正則表達(dá)式感覺就像再玩拼圖游戲?!遍_發(fā)者B:“同意,它并不完全是Python優(yōu)雅的縮影?!?nbsp;

Python “神奇”的雙下劃線屬性對(duì)于初學(xué)者來說可能看起來很晦澀難懂,但它們提供了一種強(qiáng)大的方法來自定義對(duì)象行為。然而不幸的是,他們神秘的本性經(jīng)常讓新手感到困惑。

開發(fā)者A:“Python中所有這些雙下劃線屬性是怎么回事?”開發(fā)者B:“它們被稱為'神奇方法'。旦是你必須掌握了它們的竅門,它們才會(huì)變得強(qiáng)大?!?nbsp;

3、錯(cuò)誤處理和不可變之謎

Python 的錯(cuò)誤處理方法鼓勵(lì)特定的錯(cuò)誤處理,這被認(rèn)為是一種好的做法。但是,在一個(gè)語句中捕獲所有錯(cuò)誤及其消息在開發(fā)過程中可能不直觀且繁瑣。

開發(fā)者A:“為什么我不能在 Python 中的單個(gè)語句中捕獲所有錯(cuò)誤?” 開發(fā)者B:“這一切都是為了推廣最佳實(shí)踐。但是這在開發(fā)過程中確實(shí)會(huì)很煩人?!?nbsp;

Python 缺乏對(duì)不可變字典或復(fù)雜對(duì)象的原生支持,這些也是開發(fā)人員的主要痛點(diǎn)。雖然第三方庫可以填補(bǔ)這一空白,但它仍然是一個(gè)難以忽視的不便。

開發(fā)者A:“為什么Python沒有內(nèi)置對(duì)不可變字典的支持?”開發(fā)者B:“好問題,但我也不知道為什么,只能感謝第三方庫。” 

4、社區(qū)文化沖突

一些Python社區(qū)中的成員經(jīng)常對(duì)“Pythonic(優(yōu)雅的、地道的、整潔的)方式”有著近乎狂熱的追求和堅(jiān)持。這很容易在社區(qū)中形成一些氛圍,讓初學(xué)者或者意見不同的人感到沮喪或不自在。

開發(fā)者A:“我很沮喪,我經(jīng)常被告知自己'不夠Pythonic'?!遍_發(fā)者B:“你需要專注于編寫干凈、高效的代碼,讓別人認(rèn)同你。” 

優(yōu)越感有時(shí)會(huì)滲透到Python社區(qū),有些Python開發(fā)人員看不起其他語言或編程風(fēng)格。當(dāng)然,這種態(tài)度并不代表整個(gè)社區(qū)。許多Python開發(fā)人員欣賞建設(shè)性的批評(píng),并愿意向其他語言和范式學(xué)習(xí)。

開發(fā)者A:“為什么有些Python開發(fā)人員表現(xiàn)得像Python是有史以來最好的語言?”開發(fā)者B:“在任何編程語言社區(qū)中,總會(huì)有某種程度的自豪感。但記住,最好的開發(fā)人員總是樂于學(xué)習(xí)和成長(zhǎng)?!?nbsp;

5、Python是否被高估了

對(duì)于Python是否被高估了這個(gè)辯題,其實(shí)從Python的發(fā)展歷程中我們不難窺得一隅。

十五年前的Python依靠著Web開始逐漸占領(lǐng)市場(chǎng),彼時(shí)Python的背后,是Django以及后來的Flask等Web框架。而在此后真正使Python走上主流的則是數(shù)據(jù)科學(xué)領(lǐng)域的興起。

從最初的NumPy、Scipy,再到后來真正將Python發(fā)揚(yáng)光大的的Pandas、TensorFlow、PyTorch等。正是這些Google、Meta等大廠背書的數(shù)據(jù)科學(xué)框架的流行,才使得Python一步步走到了如今的地位。

然而細(xì)究之下不難發(fā)現(xiàn),這些庫和架構(gòu),卻都不是用Python寫成的,而是C、C++甚至Fortran。時(shí)至今日,Python最核心的競(jìng)爭(zhēng)力依然是其“膠水”屬性,粘合了易用的前端和高性能的后端。

誠(chéng)然,今天的Python 在數(shù)據(jù)科學(xué)方面累積的優(yōu)勢(shì)的確難以被動(dòng)搖,但在許多其他方面,Python的表現(xiàn)的依然無法超越甚至比肩各領(lǐng)域中的翹楚。

6、結(jié)語

歸根結(jié)底,雖然Python無疑是一款流行且功能強(qiáng)大的編程語言,但它并非沒有缺陷和爭(zhēng)議點(diǎn)。通過研究Python的優(yōu)勢(shì),劣勢(shì)和爭(zhēng)議點(diǎn),我們能夠更準(zhǔn)確的描繪出更平衡的語言視圖。

在探索其他編程語言和范式時(shí),也必須意識(shí)到這些問題并保持開放的心態(tài)。

畢竟,最好的開發(fā)人員是那些能夠適應(yīng)和學(xué)習(xí)的人,他們擁抱各種編程語言的優(yōu)勢(shì),同樣的,他們也能夠擁抱各種編程語言的劣勢(shì)。

參考鏈接:

https://levelup.gitconnected.com/python-is-not-a-great-programming-language-e0edfd513961

https://www.zhihu.com/question/266096929/answer/2383570933

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2010-01-25 15:09:17

C++語言

2012-11-01 13:41:25

編程語言BasicPerl

2013-03-12 14:07:06

Java編程

2018-03-12 13:32:02

編程語言程序員語言

2010-11-04 10:55:24

編程語言

2020-07-10 10:48:51

編程語言JavaPython

2010-01-21 16:24:02

C++語言

2012-03-14 11:46:30

ibmdw

2012-03-19 10:45:44

ibmdw

2018-08-21 13:50:05

編程語言JavaPython

2015-08-31 09:27:21

語言界面UI

2015-08-03 09:36:01

賽迪翻譯

2017-07-13 16:43:23

DevOps持續(xù)集成業(yè)務(wù)

2011-07-21 14:17:15

Ceylon

2017-06-22 16:46:45

2020-12-09 10:15:34

Pythonweb代碼

2020-12-23 10:10:23

Pythonweb代碼

2022-06-22 09:44:41

Python文件代碼

2022-07-07 10:33:27

Python姿勢(shì)代碼

2022-06-06 15:44:24

大數(shù)據(jù)數(shù)據(jù)分析思維模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)