日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
為什么有些高級(jí)開(kāi)發(fā)人員不喜歡Python

本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)。

專(zhuān)注于為中小企業(yè)提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)回民免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

許多高級(jí)開(kāi)發(fā)人員表示,他們發(fā)現(xiàn)使用動(dòng)態(tài)類(lèi)型的語(yǔ)言令人頭疼。下面的響應(yīng)收集了大部分拍手。

“對(duì)不起,什么?動(dòng)態(tài)類(lèi)型的語(yǔ)言比靜態(tài)類(lèi)型的語(yǔ)言容易出錯(cuò)嗎?抱歉,但是不是我21年的軟件開(kāi)發(fā)生涯?!?

—拉斯姆斯·舒爾茨(Rasmus Schultz)

遵循此答案,我決定匯總使高級(jí)開(kāi)發(fā)人員避開(kāi)動(dòng)態(tài)鍵入語(yǔ)言的主要原因,并在此處列出這些理由以消除誤解。

為了更好地解決此問(wèn)題,由于Python的迅猛發(fā)展,我們將以Python作為動(dòng)態(tài)類(lèi)型語(yǔ)言的示例。

動(dòng)態(tài)類(lèi)型

在這種情況下鍵入與擊鍵無(wú)關(guān)。這個(gè)詞是從數(shù)據(jù)類(lèi)型派生的。

在編程方面,許多類(lèi)型的類(lèi)(例如強(qiáng)類(lèi)型和鴨子類(lèi)型)都可以發(fā)揮作用。但是,我們將自己限制為最常見(jiàn)的幾個(gè):

  • 動(dòng)態(tài)類(lèi)型
  • 靜態(tài)類(lèi)型

動(dòng)態(tài)類(lèi)型是在運(yùn)行時(shí)標(biāo)記類(lèi)型錯(cuò)誤的情況。也就是說(shuō),也不必像Python,Ruby和JavaScript那樣顯式聲明數(shù)據(jù)類(lèi)型。

與動(dòng)態(tài)類(lèi)型相反,靜態(tài)類(lèi)型是在編譯期間報(bào)告類(lèi)型錯(cuò)誤和顯式聲明數(shù)據(jù)類(lèi)型的報(bào)告。C,C ++和Java就是這種情況。

一般來(lái)說(shuō),關(guān)于Python和編程語(yǔ)言的有趣之處在于,它們的某些優(yōu)點(diǎn)還是缺點(diǎn)。

動(dòng)態(tài)類(lèi)型設(shè)置為通過(guò)隱式數(shù)據(jù)類(lèi)型聲明刪除一些代碼行來(lái)簡(jiǎn)化編碼過(guò)程。但是,此功能有很大的陷阱。

為了讓您當(dāng)場(chǎng),請(qǐng)考慮以下Python代碼示例:

 
 
 
  1. max_number = 12 
  2. my_list = [] 
  3. for i in range(1, 5): 
  4.     max_numbre = 2 * (max_number * i) 
  5.     my_list.append(max_number) 
  6.  
  7. print(my_list) 

輸出:

 
 
 
  1. [12, 12, 12, 12] 

在上面的示例中,我們要對(duì)變量max_number執(zhí)行計(jì)算并將結(jié)果存儲(chǔ)在列表中。但是,我們可以看到這一切都沒(méi)有發(fā)生,并且結(jié)果是錯(cuò)誤的。這是因?yàn)樵趂or循環(huán)中,我們拼錯(cuò)了max_number,導(dǎo)致創(chuàng)建了另一個(gè)名為max_numbre的變量。

任何人都可能犯此類(lèi)錯(cuò)誤,尤其是在工作壓力很大的人身上。

現(xiàn)在說(shuō)您正在編寫(xiě)大量代碼。您將需要更加注意下一步您的手指應(yīng)點(diǎn)擊哪些鍵。否則,跟蹤代碼中的錯(cuò)誤可能會(huì)成為噩夢(mèng),從而導(dǎo)致可維護(hù)性問(wèn)題。

但是,在像C ++這樣的靜態(tài)類(lèi)型語(yǔ)言中,必須在使用前聲明變量。而且您一定要進(jìn)行執(zhí)行前分析,以確保您的變量類(lèi)型協(xié)調(diào)一致。由于可以更好地控制變量,因此最終可以提高安全性。

靜態(tài)類(lèi)型的重要性的一個(gè)例子是2009年與三名Twitter開(kāi)發(fā)人員的對(duì)話(huà),討論了公司為何決定合并靜態(tài)類(lèi)型的語(yǔ)言Scala。

全局解釋鎖

高級(jí)開(kāi)發(fā)人員會(huì)對(duì)性能感到驚訝的一件事是性能。

與初級(jí)人員不同,初級(jí)人員需要處理幾行代碼,維護(hù)和編寫(xiě)健壯的生產(chǎn)代碼(通常為數(shù)百行或數(shù)千行代碼),是由經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員承擔(dān)的。因此,擁有高效的編程語(yǔ)言可能會(huì)變得毫無(wú)疑問(wèn)。

就是說(shuō),由于全局解釋器鎖(GIL)禁止充分利用計(jì)算機(jī)的資源,因此它是編程語(yǔ)言(如Python和MRI Ruby)的性能瓶頸。GIL損害的資源是CPU線(xiàn)程。

不過(guò),不使用GIL的編程語(yǔ)言會(huì)充分利用CPU的功能。因此已知它們支持并行計(jì)算。

并行計(jì)算無(wú)非就是讓所有線(xiàn)程同時(shí)運(yùn)行。由于需要處理的天文數(shù)據(jù)數(shù)量眾多,因此這種類(lèi)型的計(jì)算現(xiàn)在比以往任何時(shí)候都更加重要。

下圖是一個(gè)并行計(jì)算的示例:

> Example of all CPU threads running. Diagram created by the author in diagram.net

可以合理地假設(shè),在相同的CPU時(shí)鐘速度下,計(jì)算機(jī)擁有的線(xiàn)程越多,程序運(yùn)行速度就越快。

但是,GIL的出現(xiàn)終結(jié)了并行計(jì)算。

GIL是一種鎖,一次僅允許一個(gè)線(xiàn)程使用GIL。線(xiàn)程的選擇遵循排隊(duì)方式。這意味著,當(dāng)具有最高優(yōu)先級(jí)的線(xiàn)程正在使用GIL時(shí),其他線(xiàn)程將處于等待狀態(tài),直到釋放GIL。

最重要的是,用戶(hù)無(wú)法控制線(xiàn)程選擇。相反,操作系統(tǒng)是負(fù)責(zé)線(xiàn)程優(yōu)先級(jí)排序的操作系統(tǒng)。

下圖最好地說(shuō)明了發(fā)生的方式:

> GIL effects on the threads. Diagram created by the author in diagram.net

為了解決此問(wèn)題,許多程序員,或者至少是聰明的程序員,嘗試使用例如Python的多線(xiàn)程模塊在線(xiàn)程之間手動(dòng)拆分進(jìn)程,以期獲得更好的性能。他們最終最終會(huì)獲得更差的性能。

盡管結(jié)果似乎很奇怪,但它是計(jì)算機(jī)科學(xué),而不是計(jì)算機(jī)推測(cè)。如果您對(duì)問(wèn)題進(jìn)行更深入的研究,那么一切都應(yīng)該放到位。

盡管Python的核心開(kāi)發(fā)團(tuán)隊(duì)完全意識(shí)到了這個(gè)問(wèn)題,但很難擺脫GIL,因?yàn)樗荘ython許多細(xì)節(jié)的骨干,例如內(nèi)存管理和C擴(kuò)展(僅舉幾例)。

Python的正式作者Guido van Rossum表示,他對(duì)Python是否會(huì)支持并行計(jì)算并不充滿(mǎn)信心,因?yàn)檫@最終是該語(yǔ)言的設(shè)計(jì)方式。

但是,諸如C ++之類(lèi)的靜態(tài)類(lèi)型語(yǔ)言不受GIL的限制。這使得它們?cè)诒容^中效率很高。

空格敏感性

使用一種會(huì)因空格錯(cuò)位和缺失而標(biāo)記錯(cuò)誤的編程語(yǔ)言,可能并不是每個(gè)人的功勞。這些空格是空格,制表符,換行,返回或換頁(yè)。例如,與C不同,Python確實(shí)對(duì)空格敏感。

我們將通過(guò)以下C和Python代碼之間的比較來(lái)證明這一點(diǎn)。

Python版本:

 
 
 
  1. i = 50 
  2. if i % 2 == 0: 
  3.     print("inside if statement")  print("i is even") 

輸出:

 
 
 
  1. print("inside if statement") print("i is even") 
  2. SyntaxError: invalid syntax 

C版:

 
 
 
  1. #includeint main(void) 
  2. {int i = 50;if (i % 2 == 0) 
  3. {printf("inside if statement\n");printf("i is even\n");}} 

輸出:

 
 
 
  1. ~/ $ ./test1 
  2. inside if statement 
  3. i is even 

與抵制混亂的代碼結(jié)構(gòu)并最終得到正確輸出的C版本不同,Python生成的語(yǔ)法錯(cuò)誤最初是由語(yǔ)句放置錯(cuò)誤引起的。因此,有人會(huì)說(shuō)Python不如C ++或原始C健壯。

具有諷刺意味的是,盡管許多專(zhuān)業(yè)程序員認(rèn)為空白敏感性很煩人,但許多Pythonista人士認(rèn)為處理空白問(wèn)題比最后進(jìn)行列追逐要好。

最后,在處理大型代碼塊時(shí),空格敏感性問(wèn)題令人討厭。但是,如果在團(tuán)隊(duì)中灌輸良好的編碼習(xí)慣,則可以輕松解決空白敏感性問(wèn)題。

向后兼容

不支持向后兼容性意味著舊版本的Python代碼在新版本下可能無(wú)法工作。換句話(huà)說(shuō),絕對(duì)需要查找新版本中發(fā)生的語(yǔ)法更改,并相應(yīng)地重寫(xiě)其代碼。

當(dāng)向后兼容性成為一個(gè)嚴(yán)重問(wèn)題時(shí),一個(gè)很好的例子是第一次從Python 2過(guò)渡到3。

Python核心開(kāi)發(fā)團(tuán)隊(duì)認(rèn)為,人們將Python 2代碼轉(zhuǎn)換為Python 3不會(huì)有問(wèn)題。但是他們錯(cuò)了。

Python的作者本人在講話(huà)時(shí)承認(rèn)了這一點(diǎn):

“我們低估了多少人已經(jīng)編寫(xiě)了大量的Python代碼,然后基本上忘記了它是如何工作的。因此,他們不是很擅長(zhǎng)升級(jí)它。我們意識(shí)到那里存在問(wèn)題。”

關(guān)于該問(wèn)題的裁決是延長(zhǎng)了Python 2.7的壽命。

總結(jié)

編程語(yǔ)言一直是熱門(mén)話(huà)題,因此不能將其視為對(duì)與錯(cuò)。至少有一些原因使他們偏愛(ài)另一種語(yǔ)言。

通常,每種通用編程語(yǔ)言都適合特定的人群。Python的官方作者說(shuō):

“學(xué)習(xí)使用Python編程比學(xué)習(xí)使用Java或Swift編程容易得多。對(duì)于學(xué)習(xí)計(jì)算機(jī)科學(xué)的專(zhuān)業(yè)軟件開(kāi)發(fā)人員來(lái)說(shuō),Java和Swift是很棒的編程語(yǔ)言。然后開(kāi)始為一家軟件開(kāi)發(fā)公司工作。但是Python可以教給初中的孩子?!?/td>

除此之外,最理想的情況是擁有一種可以結(jié)合C ++和Python優(yōu)點(diǎn)的編程語(yǔ)言。

原文鏈接:

https://medium.com/better-programming/why-some-senior-developers-dont-like-python-974c5361fff2


網(wǎng)頁(yè)題目:為什么有些高級(jí)開(kāi)發(fā)人員不喜歡Python
分享URL:http://m.5511xx.com/article/cdjhppg.html