Python是一個(gè)糟糕的編程語(yǔ)言
我會(huì)再說(shuō)一次:Python是一種糟糕的編程語(yǔ)言,今天它是如此受歡迎的唯一原因是因?yàn)楣雀柙?000年代的第一個(gè)十年推動(dòng)它。
Python的創(chuàng)造者Guido Van Rossum,實(shí)際上在谷歌2005年到2012年工作。Go和Dart并不圍繞(或至少他們不眾名人知)和C#中的人氣(偷竊Java的開發(fā)人員)谷歌可能覺(jué)得他們需要自己的語(yǔ)言。他們可能會(huì)想要擁抱Java,因?yàn)樗麄円呀?jīng)使用它是Android的,但他們一定是偏執(zhí)狂,因?yàn)樗麄円呀?jīng)與Oracle簽訂了法律問(wèn)題。因此,無(wú)論出于何種原因,他們采用Python。我想在一個(gè)替代宇宙中,他們可以選擇,例如,Lua,也許在那里宇宙會(huì)成為今天的主導(dǎo)語(yǔ)言。當(dāng)然,Lua有點(diǎn)奇怪,所以它可能會(huì)畢竟沒(méi)有選擇那個(gè)。
但是,讓我們談?wù)劄槭裁碢ython糟透了。很難談?wù)摓槭裁从行〇|西糟透了,特別是在它流行時(shí),但這篇文章將是一種嘗試。我將覆蓋語(yǔ)言本身,而不是其表現(xiàn)或其實(shí)施。我將大多將其與Java和C#進(jìn)行比較,因?yàn)檫@些是兩個(gè)眾所周知的,成熟的語(yǔ)言,在軟件行業(yè)中有很多現(xiàn)實(shí)的使用量超過(guò)十五年。
碎片的語(yǔ)言
很長(zhǎng)一段時(shí)間,Python有兩個(gè)主要版本在野外跑去。當(dāng)然,它們是Python 2和3,它們彼此不相容。所以你被涂上這種奇怪的情況,谷歌會(huì)說(shuō)“來(lái)找伙計(jì)們,學(xué)習(xí)一些Python,這很酷!”然后你會(huì)下載它,你會(huì)選擇版本2和3之間的選擇,也許谷歌會(huì)告訴你“選擇3!”其他人會(huì)告訴你“選擇2!”然后,您會(huì)發(fā)現(xiàn)3只幾乎沒(méi)有任何兼容的庫(kù),沒(méi)有人使用它,并且3為什么開發(fā)的原因是為打印函數(shù)和表情符號(hào)支持添加括號(hào)。最近只有情況得多。例如,Ubuntu最近逐步淘汰了Python 2。
丑陋的面向?qū)ο?/h3>
Python中的一個(gè)類看起來(lái)像這樣:
- class Car:
- def __init__(self):
- self.color = "red"
- self.wheels = 4
- def get_wheels(self):
- return f"{self.wheels}!"
我希望你喜歡那些self關(guān)鍵字,因?yàn)槟銜?huì)在Python的任何地方看到它們。
這是指類的實(shí)例變量的方式。它就像Java或C#中的這個(gè)關(guān)鍵字,只有在Python中,他們需要,因?yàn)镻ython是愚蠢的。
請(qǐng)注意此類有2個(gè)實(shí)例變量:color和wheels?請(qǐng)參閱如何在構(gòu)造函數(shù)中聲明并初始化它們?Python愚蠢的另一個(gè)例子。
你可能想知道“我如何使他們私有實(shí)例變量?”好吧,答案是你沒(méi)有。你不能。在Python中沒(méi)有私有實(shí)例變量如此。
您在Python中可以做得最好的是用兩個(gè)下劃線啟動(dòng)它們,如下所示:self .__ color =“red”
這是導(dǎo)致Python解釋器要敲打變量的名稱,因此它無(wú)法從類外部訪問(wèn)(但有一些持久性,如果您想要,您仍然可以從類外部訪問(wèn)變量)。所以它不會(huì)成為私有變量,但它變得令人作嘔。
當(dāng)然,它有效,但來(lái)了。想要在C#或Java中定義私有實(shí)例變量?將關(guān)鍵字私有放在前面。
如果您向Python開發(fā)人員詢問(wèn)了這一點(diǎn),他們將回復(fù):“不要訪問(wèn)另一個(gè)類的實(shí)例變量,lol”。一般來(lái)說(shuō),當(dāng)你指出他們的語(yǔ)言中的任何缺陷時(shí),Python開發(fā)人員將采取敵意和居高臨下。
空格
啊,空格。Python垃圾的另一個(gè)原因。在一個(gè)明智語(yǔ)言范圍中,程序塊是用括號(hào)完成的,或者開始和結(jié)束關(guān)鍵字,或類似的東西。但不是在Python!Python認(rèn)為向空格提供語(yǔ)義含義很好。為什么在地球上他們會(huì)給出語(yǔ)義含義,這是無(wú)法看到的東西嗎?誰(shuí)認(rèn)為這是一個(gè)好主意?
雷德德特史蒂夫·霍夫曼的聯(lián)合創(chuàng)始人表示:
當(dāng)我們雇用新員工……我不認(rèn)為我們還聘請(qǐng)了一名了解Python的員工。我只是說(shuō),“你寫的一切都需要在Python。”所以我可以讀它。它真棒,因?yàn)槲铱梢詮姆块g里看到,看著他們的屏幕,他們的代碼是好還是壞的。 |
所以即使我想相信這個(gè)家伙能夠從整個(gè)房間做代碼評(píng)論,如何使用的空格比卷曲括號(hào)更好?在幾乎任何其他現(xiàn)代語(yǔ)言中,使用縮進(jìn)是寫入方法時(shí)的常態(tài)。只有在Python中,標(biāo)簽和空間之間的區(qū)別會(huì)導(dǎo)致口譯員有心臟病發(fā)作。
動(dòng)態(tài)類型
動(dòng)態(tài)類型很糟糕,任何不同意我的人可能都沒(méi)有寫過(guò)足夠的軟件來(lái)實(shí)現(xiàn)它。通過(guò)動(dòng)態(tài)鍵入,程序的增長(zhǎng)越大,它變得更加明顯。我預(yù)測(cè),在未來(lái),所有主流編程語(yǔ)言都將靜態(tài)鍵入,并且使用動(dòng)態(tài)類型的語(yǔ)言將像使用弓箭一樣。您將能夠在YouTube頻道原始技術(shù)上以動(dòng)態(tài)類型的語(yǔ)言觀看人員編程。最近出現(xiàn)的語(yǔ)言,如類型簽字,給我希望。
一些Python程序員已經(jīng)意識(shí)到動(dòng)態(tài)鍵入是糟糕的,所以現(xiàn)在我們有Mypy,但如果你要向Python添加類型的注釋,你為什么不僅僅是像Java或C#這樣的語(yǔ)言?
常數(shù)
Python沒(méi)有常數(shù)。我的意思是,如果你在文章中邁出了這一點(diǎn),你期望了什么?使變量常量的問(wèn)題,Python開發(fā)人員的建議是“只是不改變它”。
皇帝沒(méi)有衣服
Python是一個(gè)案例研究,人們?nèi)绾螄L試與某些東西一起生活,適應(yīng)它,并合理化他們對(duì)它的熱愛(ài),所有,而不是將其扔出并找到更好的東西。這樣也許這是一種愛(ài)的信息,或希望,或者什么的?不知何故,來(lái)自1991年的這個(gè)副本語(yǔ)言超過(guò)了幾種更新的語(yǔ)言,對(duì)此做任何事情可能為時(shí)已晚。 2014年,它成為大學(xué)最受歡迎的介紹性教學(xué)。
因此,我們將開始看到更多的孩子用Python進(jìn)入業(yè)界作為他們的主要語(yǔ)言,并且Python只會(huì)隨著越來(lái)越多的軟件在其中編寫了越來(lái)越多的軟件。在這份寫作時(shí),它目前在Tiobe指數(shù)上排名第2,該公司指定Python“2020年的編程語(yǔ)言”。如果您想在2021年做機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué),答案是使用Python,因?yàn)樗蔷哂写蠖鄶?shù)庫(kù)支持的語(yǔ)言。至少我們可以感恩谷歌沒(méi)有選擇。
原文鏈接:https://medium.com/nerd-for-tech/python-is-a-bad-programming-language-2ab73b0bda5