成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么有些高級開發人員不喜歡Python

開發 后端
許多高級開發人員表示,他們發現使用動態類型的語言令人頭疼。下面的響應收集了大部分拍手。

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。

許多高級開發人員表示,他們發現使用動態類型的語言令人頭疼。下面的響應收集了大部分拍手。

“對不起,什么?動態類型的語言比靜態類型的語言容易出錯嗎?抱歉,但是不是我21年的軟件開發生涯。”

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

遵循此答案,我決定匯總使高級開發人員避開動態鍵入語言的主要原因,并在此處列出這些理由以消除誤解。

為了更好地解決此問題,由于Python的迅猛發展,我們將以Python作為動態類型語言的示例。

動態類型

在這種情況下鍵入與擊鍵無關。這個詞是從數據類型派生的。

在編程方面,許多類型的類(例如強類型和鴨子類型)都可以發揮作用。但是,我們將自己限制為最常見的幾個:

  • 動態類型
  • 靜態類型

動態類型是在運行時標記類型錯誤的情況。也就是說,也不必像Python,Ruby和JavaScript那樣顯式聲明數據類型。

與動態類型相反,靜態類型是在編譯期間報告類型錯誤和顯式聲明數據類型的報告。C,C ++和Java就是這種情況。

一般來說,關于Python和編程語言的有趣之處在于,它們的某些優點還是缺點。

動態類型設置為通過隱式數據類型聲明刪除一些代碼行來簡化編碼過程。但是,此功能有很大的陷阱。

為了讓您當場,請考慮以下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] 

在上面的示例中,我們要對變量max_number執行計算并將結果存儲在列表中。但是,我們可以看到這一切都沒有發生,并且結果是錯誤的。這是因為在for循環中,我們拼錯了max_number,導致創建了另一個名為max_numbre的變量。

任何人都可能犯此類錯誤,尤其是在工作壓力很大的人身上。

現在說您正在編寫大量代碼。您將需要更加注意下一步您的手指應點擊哪些鍵。否則,跟蹤代碼中的錯誤可能會成為噩夢,從而導致可維護性問題。

但是,在像C ++這樣的靜態類型語言中,必須在使用前聲明變量。而且您一定要進行執行前分析,以確保您的變量類型協調一致。由于可以更好地控制變量,因此最終可以提高安全性。

靜態類型的重要性的一個例子是2009年與三名Twitter開發人員的對話,討論了公司為何決定合并靜態類型的語言Scala。

全局解釋鎖

高級開發人員會對性能感到驚訝的一件事是性能。

與初級人員不同,初級人員需要處理幾行代碼,維護和編寫健壯的生產代碼(通常為數百行或數千行代碼),是由經驗豐富的開發人員承擔的。因此,擁有高效的編程語言可能會變得毫無疑問。

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

不過,不使用GIL的編程語言會充分利用CPU的功能。因此已知它們支持并行計算。

并行計算無非就是讓所有線程同時運行。由于需要處理的天文數據數量眾多,因此這種類型的計算現在比以往任何時候都更加重要。

下圖是一個并行計算的示例:

為什么有些高級開發人員不喜歡Python

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

可以合理地假設,在相同的CPU時鐘速度下,計算機擁有的線程越多,程序運行速度就越快。

但是,GIL的出現終結了并行計算。

GIL是一種鎖,一次僅允許一個線程使用GIL。線程的選擇遵循排隊方式。這意味著,當具有最高優先級的線程正在使用GIL時,其他線程將處于等待狀態,直到釋放GIL。

最重要的是,用戶無法控制線程選擇。相反,操作系統是負責線程優先級排序的操作系統。

下圖最好地說明了發生的方式:

為什么有些高級開發人員不喜歡Python

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

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

盡管結果似乎很奇怪,但它是計算機科學,而不是計算機推測。如果您對問題進行更深入的研究,那么一切都應該放到位。

盡管Python的核心開發團隊完全意識到了這個問題,但很難擺脫GIL,因為它是Python許多細節的骨干,例如內存管理和C擴展(僅舉幾例)。

Python的正式作者Guido van Rossum表示,他對Python是否會支持并行計算并不充滿信心,因為這最終是該語言的設計方式。

但是,諸如C ++之類的靜態類型語言不受GIL的限制。這使得它們在比較中效率很高。

空格敏感性

使用一種會因空格錯位和缺失而標記錯誤的編程語言,可能并不是每個人的功勞。這些空格是空格,制表符,換行,返回或換頁。例如,與C不同,Python確實對空格敏感。

我們將通過以下C和Python代碼之間的比較來證明這一點。

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. #include<stdio.h>int 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 

與抵制混亂的代碼結構并最終得到正確輸出的C版本不同,Python生成的語法錯誤最初是由語句放置錯誤引起的。因此,有人會說Python不如C ++或原始C健壯。

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

最后,在處理大型代碼塊時,空格敏感性問題令人討厭。但是,如果在團隊中灌輸良好的編碼習慣,則可以輕松解決空白敏感性問題。

向后兼容

不支持向后兼容性意味著舊版本的Python代碼在新版本下可能無法工作。換句話說,絕對需要查找新版本中發生的語法更改,并相應地重寫其代碼。

當向后兼容性成為一個嚴重問題時,一個很好的例子是第一次從Python 2過渡到3。

Python核心開發團隊認為,人們將Python 2代碼轉換為Python 3不會有問題。但是他們錯了。

Python的作者本人在講話時承認了這一點:

“我們低估了多少人已經編寫了大量的Python代碼,然后基本上忘記了它是如何工作的。因此,他們不是很擅長升級它。我們意識到那里存在問題。”

關于該問題的裁決是延長了Python 2.7的壽命。

總結

編程語言一直是熱門話題,因此不能將其視為對與錯。至少有一些原因使他們偏愛另一種語言。

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

“學習使用Python編程比學習使用Java或Swift編程容易得多。對于學習計算機科學的專業軟件開發人員來說,Java和Swift是很棒的編程語言。然后開始為一家軟件開發公司工作。但是Python可以教給初中的孩子。”

除此之外,最理想的情況是擁有一種可以結合C ++和Python優點的編程語言。

原文鏈接:

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

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2022-03-03 23:30:27

TypeScrip開發前端

2021-04-18 18:12:07

Linux開發操作系統

2023-01-11 12:14:50

NeoVimVim開發

2022-12-19 07:33:49

開發人員谷歌制度

2018-07-09 14:05:16

編程語言PythonPipenv

2020-07-23 08:21:25

PHP開發人員MVC

2011-05-05 17:57:18

軟件開發

2012-12-14 08:55:45

開發人員產品經理

2022-06-05 23:47:06

開發無代碼低代碼

2021-11-01 22:19:29

開發測試代碼

2020-06-22 07:18:21

Java語言開發

2011-06-20 08:43:15

Windows 8開發人員

2023-09-04 08:20:00

2023-12-25 07:58:46

Python開發.NET

2023-10-13 06:54:58

2022-10-25 15:51:40

2012-06-18 15:05:54

開發

2019-09-24 15:29:57

程序員開發數據

2011-12-21 09:19:32

API

2014-09-12 10:28:28

技術開發程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久亚洲精品 | 美女视频黄色的 | 一区二区三区av | 国产激情综合五月久久 | 中文字幕av中文字幕 | 99精品国产一区二区三区 | 9999精品视频 | 天天躁日日躁狠狠很躁 | 天堂va在线 | 亚洲 自拍 另类 欧美 丝袜 | 777zyz色资源站在线观看 | 久久欧美高清二区三区 | 久久综合伊人一区二区三 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 久久香蕉网 | 99免费在线 | 国产成人综合在线 | 午夜视频一区二区 | 在线播放国产一区二区三区 | 第一av | 久久精品亚洲国产 | 国产精品无 | 麻豆视频在线免费观看 | 亚洲精品在线观看视频 | 91精品久久久久 | 国产精品一区久久久久 | 成人黄色在线观看 | 一级片在线视频 | 91在线视频网址 | 毛片一级网站 | 狠狠干影院 | 91精品久久久久久久久久 | 日韩综合一区 | 粉嫩一区二区三区国产精品 | 国产免费av网 | 色视频网站免费 | 国产视频一区在线 | 亚洲欧美在线视频 | 国产一区二区在线观看视频 | 亚洲精品久久久一区二区三区 | 日本中文字幕在线观看 |