a级毛片免费全部播放-a级毛片免费观看在线播放-a级毛片免费观看网站-a级毛片免费看-国产成人精品在视频-国产成人精品在线

歡迎來到培訓(xùn)無憂網(wǎng)!

全國切換

咨詢熱線 400-001-5729

位置:培訓(xùn)無憂網(wǎng) > 新聞資訊 > 電腦/IT > python培訓(xùn) >  有些高級(jí)開發(fā)不喜歡 Python的原因

有些高級(jí)開發(fā)不喜歡 Python的原因

來源:培訓(xùn)無憂網(wǎng) 發(fā)布人:彭二胖

2021-11-16 23:13:59|已瀏覽:261次


        不少人認(rèn)為 Python 方便掌握,而且不易出錯(cuò)。然而,并非所有人都同意這個(gè)觀點(diǎn)。

        許多高級(jí)開發(fā)表示,使用動(dòng)態(tài)類型的語言實(shí)在很令人頭疼:

        “什么?動(dòng)態(tài)類型的語言比靜態(tài)類型的語言更加不容易出錯(cuò)?抱歉,21年的軟件開發(fā)職業(yè)生涯告訴我并不是這樣。”

—— Rasmus Schultz

        在本文中,我們就來看一看高級(jí)開發(fā)人員不喜歡動(dòng)態(tài)類型語言的主要原因,同時(shí)我也希望通過本文消除大家的誤解。

        為了更好地挖掘背后的原因,以及鑒于 Python 的廣泛普及,我們以 Python 為例來分析一下。

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

        這里所說的動(dòng)態(tài)類型指的是數(shù)據(jù)類型。

        編程語言包含多種類型的風(fēng)格,比如強(qiáng)類型和鴨子類型等。但是,在本文中我們只討論兩個(gè)最常見的類型:

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

  • 靜態(tài)類型

        動(dòng)態(tài)類型指的是在運(yùn)行時(shí)檢查類型錯(cuò)誤。也就是說不需要顯式聲明數(shù)據(jù)類型。Python、Ruby 和 JavaScript 都是這類語言。

        與動(dòng)態(tài)類型相反,靜態(tài)類型則會(huì)在編譯期間報(bào)告類型錯(cuò)誤,因此你需要顯式聲明數(shù)據(jù)類型。C、C++ 和 Java 就屬于這種情況。

        一般來說,Python 以及其他編程語言的某些優(yōu)點(diǎn)也會(huì)成為缺點(diǎn)。

        動(dòng)態(tài)類型可以通過隱式的數(shù)據(jù)類型聲明減少一部分代碼,從而讓編程變得更容易。但是,這個(gè)特性也有一些缺陷。

        請考慮如下 Python 代碼:

        max_number = 12

        my_list = []

        for i in range(1, 5):

                max_numbre = 2 * (max_number * i)

                my_list.append(max_number)

        print(my_list)

        輸出結(jié)果:[12, 12, 12, 12]

        在這個(gè)例子中,我們希望針對變量 max_number 進(jìn)行一些計(jì)算,并將結(jié)果存儲(chǔ)在列表中。但是,我們可以看到實(shí)際的操作并不符合我們的預(yù)期,而結(jié)果也是錯(cuò)誤的。因?yàn)樵?for 循環(huán)中,max_number 的拼寫有誤,因此導(dǎo)致程序創(chuàng)建了另一個(gè)名為 max_numbre 的變量。

        任何人都可能犯這樣的錯(cuò)誤,特別是對于工作壓力很大的人。

        假設(shè)你正在編寫一大段代碼,那么你必須更加小心手指按下的每一個(gè)按鍵。否則,查找代碼中的bug就會(huì)成為噩夢,并引發(fā)維護(hù)性的問題。

        然而,在靜態(tài)類型的語言(比如C++)中,你必須在使用前聲明變量。而且你必須在執(zhí)行代碼前進(jìn)行分析,以確保變量類型匹配。這樣你對變量的控制會(huì)更有力,因此可以提高安全性。

全局解釋器鎖

        高級(jí)開發(fā)人員對動(dòng)態(tài)類型語言的另一個(gè)質(zhì)疑是性能。

        初級(jí)開發(fā)人員只需要處理好幾行代碼,而維護(hù)和編寫健壯的生產(chǎn)代碼(幾百行~幾千行)的重任一般都由經(jīng)驗(yàn)豐富的高級(jí)開發(fā)人員承擔(dān)。因此,對他們來說,編程語言的效率不容置疑。

        由于全局解釋器鎖(Global Interpreter Lock,即 GIL)的存在,計(jì)算機(jī)的資源(主要是 CPU 線程數(shù))得不到充分利用,因此它是編程語言(如 Python 和 MRI Ruby 等)的性能瓶頸。

        不過,不使用 GIL 的編程語言可以充分利用 CPU 的功能,因?yàn)樗鼈冎С植⑿杏?jì)算。

        并行計(jì)算只不過是讓所有線程同時(shí)運(yùn)行而已。在需要處理的數(shù)據(jù)量十分龐大時(shí),這種類型的計(jì)算會(huì)比較有優(yōu)勢。

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

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

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

        最重要的是,用戶無法控制線程的選擇。只能由操作系統(tǒng)負(fù)責(zé)線程優(yōu)先級(jí)的排序。

        為了解決這個(gè)問題,許多程序員都嘗試手動(dòng)在多個(gè)線程之間拆分進(jìn)程,比如 Python 的 multithreading 模塊,就是為了獲得更好的性能。然而,最終的結(jié)果卻是性能更差了。

        這個(gè)結(jié)果有點(diǎn)奇怪,如果你想搞清楚事情的始末,則必須再深入研究一下。

        盡管 Python 的核心開發(fā)團(tuán)隊(duì)已經(jīng)意識(shí)到了這個(gè)問題,但是想擺脫 GIL 太難了,因?yàn)樗窃S多 Python 功能的基礎(chǔ),例如內(nèi)存管理和C擴(kuò)展等等。

        Python 的作者 Guido van Rossum 表示,他不確定 Python 是否會(huì)支持并行計(jì)算,因?yàn)檫@歸根結(jié)底是語言設(shè)計(jì)層面的問題。

        但是,C++ 等靜態(tài)類型語言不受 GIL 的限制,因此它們的效率相對更高。

空白的敏感度

        錯(cuò)誤地使用空白就會(huì)報(bào)錯(cuò),并不是每個(gè)人都喜歡這樣的編程語言。空白不僅包括空格,還包括制表符、換行、返回或換頁等。例如,與C不同,Python 對空格就非常敏感。

        下面,我們就來比較一下 C 和 Python 代碼。

        Python 示例:

        i = 50

        if i % 2 == 0:

        print("inside if statement")

        print("i is even")

        輸出結(jié)果:print("inside if statement")print("i is even")^SyntaxError: invalid syntax

        C 示例:

        #include<stdio.h>

        intmain(void)

        {

                int i =50;

                if(i %2==0)

        }

        輸出結(jié)果:~/ $ ./test1insideifstatementi is even

        C 的代碼結(jié)構(gòu)無論再怎么混亂,都可以得到正確的輸出,而 Python 生成的語法錯(cuò)誤只是因?yàn)檎Z句的書寫位置有誤。因此,有人可能會(huì)說 Python 的健壯性不如 C++ 或 C。

        盡管許多專業(yè)程序員都認(rèn)為空白過于敏感很討人厭,但許多 Python 專家則認(rèn)為,空白的問題總好過代碼長得看不到盡頭。

        最后,在處理大塊代碼時(shí),空白的敏感性問題確實(shí)很煩人。但是,如果能夠向團(tuán)隊(duì)灌輸良好的編碼習(xí)慣,則這個(gè)問題也很好解決。

向后兼容

        不支持向后兼容意味著舊版的 Python 代碼無法在新版本中正常工作。換句話說,每當(dāng)新版本發(fā)布時(shí),你都需要找出語法的變化,并重寫相應(yīng)的部分代碼。

        有時(shí),向后兼容性會(huì)成為一個(gè)嚴(yán)重的問題,Python 2 到 Python 3 就是一個(gè)很好的例子。

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

        Python 的作者也承認(rèn)了這一點(diǎn):“我們低估了有多少人已經(jīng)編寫了大量的 Python 代碼,而且他們已經(jīng)基本忘記了代碼的工作方式。因此,他們沒能很好地升級(jí)這些代碼。我們已經(jīng)意識(shí)到了這個(gè)問題。”

        這個(gè)問題爭論到最后,他們決定延長 Python 2.7 的壽命。

總結(jié)

        編程語言一直是一個(gè)熱門話題,這不是一個(gè)非黑即白的兩極分化問題。我們會(huì)因?yàn)槟承┰蚨珢勰骋环N編程語言。

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

        “學(xué)習(xí)使用 Python 編程比學(xué)習(xí)使用 Java 或 Swift 要容易得多。Java 和 Swift 非常適合計(jì)算機(jī)科學(xué)的專業(yè)軟件開發(fā)人員。但是 Python 更適合孩子的教學(xué)。”

        話雖如此,我們非常希望能夠出現(xiàn)一種兼具C++ 和 Python 優(yōu)點(diǎn)的編程語言。

        本文由培訓(xùn)無憂網(wǎng)千鋒教育專屬課程顧問整理發(fā)布,希望能夠?qū)ο雽W(xué)習(xí)Python開發(fā)培訓(xùn)的同學(xué)有所幫助。更多Python開發(fā)培訓(xùn)課程歡迎關(guān)注培訓(xùn)無憂網(wǎng)Python開發(fā)培訓(xùn)頻道或添加老師微信:15033336050


      注:尊重原創(chuàng)文章,轉(zhuǎn)載請注明出處和鏈接 http://m.dedgn.cn/news-id-4022.html 違者必究!部分文章來源于網(wǎng)絡(luò)由培訓(xùn)無憂網(wǎng)編輯部人員整理發(fā)布,內(nèi)容真實(shí)性請自行核實(shí)或聯(lián)系我們,了解更多相關(guān)資訊請關(guān)注python培訓(xùn)頻道查看更多,了解相關(guān)專業(yè)課程信息您可在線咨詢也可免費(fèi)申請?jiān)囌n。關(guān)注官方微信了解更多:150 3333 6050

留下你的信息,課程顧問老師會(huì)一對一幫助你規(guī)劃更適合你的專業(yè)課程!
  • 姓名:

  • 手機(jī):

  • 地區(qū):

  • 想學(xué)什么:

  • 培訓(xùn)無憂網(wǎng)
免 費(fèi) 申 請 試 聽
提交申請,《培訓(xùn)無憂網(wǎng)》課程顧問老師會(huì)一對一幫助你規(guī)劃更適合你的專業(yè)課程!

主站蜘蛛池模板: 美国一级毛片片免费 | 日本一区二区三区高清在线观看 | 一级女性全黄久久生活片 | 精品久久精品久久 | 中文字幕在线视频网站 | 99精品高清不卡在线观看 | 手机国产日韩高清免费看片 | 久久精品资源 | 黄色三级网站在线观看 | 牲欧美 | 国产一区二区三区四区在线 | 一本色道久久88亚洲综合 | 成年人毛片网站 | 黄色成人免费观看 | 中文字幕一二三区 | 九九热视频精品在线观看 | 亚洲国产精久久久久久久春色 | 成人涩涩屋福利视频 | 久色成人 | 亚洲高清免费视频 | 午夜不卡在线 | 国产精品爱久久久久久久小 | 一级一片在线播放在线观看 | 欧美精品在线一区 | 99热.com| 美国三级网站 | 日韩福利视频精品专区 | 91国语精品自产拍在线观看一 | 永久黄网站色视频免费网站 | 狠狠se| 亚洲视频区 | 久久精品国产亚洲精品2020 | 一级毛片免费不卡在线 | 亚洲视频免费在线 | 午夜国产精品不卡在线观看 | 免费a级黄毛片 | 成人免费网站久久久 | 精品真实国产乱文在线 | 国产欧美一区二区三区视频在线观看 | 欧美一级网站 | 色综合久久久久久久 |