日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

隨著 AI 的發展,憑借易學易用的語法、豐富的庫和框架,Python/ target=_blank class=infotextkey>Python 在機器學習、深度學習、自然語言處理和數據科學等領域有著廣泛的應用。然而,對于初學者而言,對于 Python 的很多特性以及使用上依然還存在著巨大的爭論。本文作者 Naren Yellavula 從中挑選了 5 個最為常見的論點,希望能通過實例演示,幫助解答剛入門的程序員們的困惑。

原文:https://medium.com/dev-bits/does-python-really-sucks-e380711ec3e9

翻譯工具 | ChatGPT 責編 | 蘇宓

出品 | CSDN(ID:CSDNnews)

以下為譯文:

各位開發者,大家好。今天我想提出一個新話題,用一種輕松的方式解決大家對 Python 編程語言經常提出的幾個問題。最近我看到一些關于 Python 編程語言的負面看法,例如:“為什么 Python 無論是對兒童還是成年人來說,都是一門糟糕的入門編程語言?”等等。這種現象經常出現在使用其他編程語言的開發人員中。

我經常聽到外界對 Python 的五個抱怨是:

  1. 縮進規則很可怕
  2. 沒有強類型
  3. 速度慢
  4. 不適用于大型代碼庫
  5. import 系統不可預測

我認為人們對過去三十二年(1991 至今)一直處于發展中的 Python 語言有一些誤解。Python 絕對不是一種新語言,就像傳統軟件一樣,它逐漸迭代形成了今天的樣子。在本文中,我將澄清一些新程序員常見的誤解,并解釋為什么 Python 語言中存在這些令人驚訝的細節。

介紹

Leetcoder 建議使用 Python,因為 Python 使他們能夠比 JAVA 或 Go 更快地編寫代碼。同樣,研究人員和科學家選擇 Python 作為他們創建現代機器學習包(例如 sci-kit、pandas)的主要語言,因為它簡單易懂。如果你查閱 Python 的哲學“Python 之禪”(https://peps.python.org/pep-0020/),你可以清楚地看到其中的一個原則:

Simple is better than complex(簡單勝于復雜)

但是,簡單有時很容易會被誤解為“無能”或“玩具般”的特性。正因為其簡單性,Python 沒有 Java 面向對象的細微差別,也沒有 Erlang 或 C++ 所擁有的小眾市場。這并不意味著 Python 無法表達強大的想法。與這種想法相反,Python 允許人們既與計算機交流,又與程序員交流。

最終結果是,人工智能領域的大多數研究論文都在用 Python 實現其算法。

Python 的語言設計受到簡單選擇的強烈影響。這意味著在需要做決策時,Python 更愿意選擇簡單的命名、輕量級的包等。

現在讓我們看看行業內有關 Python 的一些抱怨以及如何通過提出一些具體的原因來澄清這些謬論。

縮進 Python 代碼很可怕

如果你從其他編程語言(如 C、C++、C# 或 Java)轉向 Python,首先遇到的困難就是代碼縮進和缺少花括號{}。

為什么 Python 代碼需要四個空格或一個制表符 TAB 來將一組語句放入一個邏輯塊中?為什么他們不能像其他語言一樣使用花括號{}來定義函數或邏輯條件?

這是很多新手在使用 Python 時首先關注到的事情。當他們在縮進方面犯錯并嘗試運行 Python 程序時,他們可能會收到解釋器錯誤。讓我們通過比較一個簡單的 C 程序和它的 Python 對應程序,來可視化這一現象,這個程序用于查找整數數組中的最大元素。

1#include<stdio.h>

2

3intfind_max(intarr[], intsize){

4intmax = arr[0];

5for(inti = 1; i < size; i++) {

6if(arr[i] > max) {

7max = arr[i];

8}

9}

10returnmax;

11}

12

13intmain{

14intarr[] = {5, 10, 3, 8, 15};

15intsize = sizeof(arr) / sizeof(arr[0]);

16intmax = find_max(arr, size);

17printf("Maximum element in the list: %dn", max);

18return0;

19}

正如你在這里所看到的,我們定義了一個名為`find_max`的函數,用于找到整數數組中的最大整數。第 3-11 行定義了這個函數。第 6-8 行定義了一個 if 條件。因為這是 C 語言,你需要用花括號{}來標識給定塊的范圍。這一開始聽起來是合理的,但你也可以注意到,盡管有 C 編譯器的自然邊界,第 4-10 行的縮進是為了可讀性。可讀性?對,就是這個。C 代碼需要為編譯器和人類提供提示,因此它同時使用花括號和基于空格的縮進。

現在,讓我們看看 Python 對應的程序。

1def find_max(arr):

2max= arr[0]

3fornum inarr:

4ifnum > max:

5max= num

6returnmax

7

8arr = [5, 10, 3, 8, 15]

9max_num = find_max(arr)

10print("Maximum element in the list:", max_num)

這是用 Python 重寫了上述的 C 程序。正如你所看到的,第 1-6 行定義了一個函數。第 4-5 行定義了`if`邏輯條件。這里的縮進(4個空格)告訴解釋器,每個向右縮進到頂級構造的指令都屬于該構造。與此同時,它還為程序員提供了可讀性,以清楚地看到代碼的邊界。

一箭雙雕,不是嗎?Python 在這里做了一個合乎邏輯的決定,使用換行符(n)作為函數和邏輯語句的自然邊界。有人可能會爭論說,難以看到長度為 100 行的縮進塊。我同意。當你的函數有 100 行時,會變得混亂,但在這種情況下,你應該考慮將代碼拆分成更小的函數,以提高可讀性。

沒有強類型

很多人強調 Python 缺乏像 C、Java 或 Go 那樣的強類型。是的,Python 缺乏類型,但其他動態編程語言如 Java、Ruby 或 Lua 也是如此。這是動態編程語言的特性。Python 缺乏基本類型是內在于其語言設計的。在 Python 中,一切都是對象,包括函數。要驗證這個論點,你可以在 Python shell 中運行這個語句,使用任何數據類型。

1isinstance(1, object) # Returns True

你可以問,“為什么解釋型語言沒有強類型?”

答案是因為它們是解釋型的。解釋型語言一次性讀取和執行程序。相比之下,編譯型語言可以掃描程序以查看任何可能的類型不匹配,并在執行實際的編譯二進制代碼之前報告它們。在使用動態語言編寫代碼的最大好處是它的交互式反饋或REPL(讀取-評估-打印循環)。Python 選擇了這種方式,是因為動態程序以靜態類型檢查的代價更快地向用戶提供反饋。

Python 的這種動態特性是否對項目有害?這取決于具體情況。如果一個人希望擁有一個沒有單元測試的代碼庫,并且主要依賴編譯器來捕獲軟件錯誤,那么 Python 對他們來說是一個正確的選擇。在使用 Python 時,編寫單元測試,執行異常處理,可以提高大型代碼庫的代碼質量和可維護性。我們將在后面的部分中更詳細地討論這個問題。

Python 很慢

慢是一個相對的術語。對象 A 可能比對象 B 更快,但比對象 C 更慢。在進行比較時,我們應該更重視“對于給定用例的可接受性性能是什么?”而不是“Python 是否比 Java 慢?”。例如,在 I/O 綁定任務中,程序等待來自連接網絡的答案,而不是計算即時答案。而且并不是所有任務都受 CPU 的限制。大多數 Web 服務器很少受 CPU 限制。Python 在多個網絡系統之間作為粘合系統表現非常出色,并充分利用了其異步 I/O 功能。

如果一個人的 Python 應用程序的關鍵路徑需要 CPU 密集型操作,他們可以將其卸載到使用性能高、低級編程語言實現的 RPC 或 HTTP API 中。

因此,說 Python 慢就像確認“地球很大”,但在什么情況下呢?地球與人類或喜馬拉雅山相比,確實很大。但與太陽、木衛一或土星等其他天體相比,它很小。在構建控制平面的背景下,Python 絕對是可以接受的,但可能不適合用于實現受 CPU 限制的高性能數據庫方面。因此,在大多數用例中,說“Python 慢”都不是一個公正的評價。

Python 不適用于大型代碼庫

這是我經常聽到從其他編程語言遷移到 Python 的開發人員的觀點。

對此,我得到的進一步原因包括:

  • 沒有類型
  • 沒有好的 IDE 自動提供代碼建議支持
  • 難以調試邏輯錯誤

上文中,我們已經討論了“無類型”這一說法。擁有良好的單元測試肯定可以幫助維護代碼,并不是避免使用大型代碼庫的強有力原因。

十年前,Python 的 IDE 自動補全功能可能落后于靜態類型語言如 C# 或 Java。但現在不再如此。使用現代 IDE,如 PyCharm 和 VSCode,以及專用插件,我們幾乎感覺不到任何差異。

由于代碼中的多種原因,調試遺留企業項目中的邏輯錯誤是一場噩夢:

  1. 命名不當
  2. 函數違反單一職責原則(SRP)
  3. 共享全局狀態
  4. 沒有測試用例
  5. 模塊/包臃腫

這些問題可以降低任何編程語言編寫的項目的調試體驗,而不僅僅是 Python。如果你不同意我的觀點,試著調試一個大規模編寫得很糟糕的 Go 項目。你會討厭你的生活。

最后,鑒于行業正在向微服務或無服務器函數等更小的計算單元邁進,大型代碼庫將在十年左右的時間逐漸轉變為多個代碼庫。也許這些代碼庫可以愉快地使用 Python。

Python 的 import 系統不可預測

Python 初學者也抱怨在 Python 中調試模塊導入錯誤是多么令人沮喪。但大多數人在開始項目之前都不會閱讀有關 Python 導入系統(https://docs.python.org/3/reference/import.html)和模塊(https://docs.python.org/3/tutorial/modules.html#the-module-search-path)的文檔。

Python和Java等語言的封裝系統有很大的不同。Java 包是類的命名空間,而 Python 包是模塊的命名空間。它們不一樣。

結論

Python 像任何其他編程語言一樣,不是萬能解決方案。通過了解它的歷史和細微之處,而不僅僅是語法,新手可以更好地欣賞 Python。

我喜歡 Python,因為與像 Java 這樣的靜態類型、富有細微差別的面向對象編程語言相比,它的學習曲線較淺,它在算法開發、機器學習和科學計算等許多領域都有所啟發。所以回答我最初的問題:

Python 真的很糟糕嗎?不,絕對不會,如果你仔細理解它的話。

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定