Python,程式語言界的優雅貓咪:獨立、精巧,看似不需要你,直到它真的需要你為止。這種特質在它的for循環中體現得淋漓盡致,它能讓你瞬間感覺自己既是天才又是白痴。
Python的for循環並非不好,而是太擅長假裝比你更懂。
大多數程式語言的for迴圈都很直覺。想數到10?沒問題,給你一堆樣板程式碼讓你覺得自己很聰明。
C語言的寫法:
<code class="language-c">for (int i = 0; i < 10; i++) { printf("%d\n", i); }</code>
簡潔、可預測、尊重你的智商。
而Python則說:
「幹嘛費力定義i,指定範圍,或進行基本的算術運算?我直接把所有東西都擺在你面前,讓你體驗一下冒牌程式設計師的感覺。”
Python的版本:
<code class="language-python">for i in range(10): print(i)</code>
就是這樣。無需聲明,無需大括號,只有「氛圍」。 Python的for循環太簡單了,以至於感覺有點不對勁兒。
假設你有一個水果列表,想印出來。
C語言版本(再次強調,很尊重人):
<code class="language-c">char* fruits[] = {"apple", "banana", "cherry"}; for (int i = 0; i < 3; i++) { printf("%s\n", fruits[i]); }</code>
Python版本:
<code class="language-python">fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit)</code>
注意到什麼了嗎? Python甚至懶得給你索引。它像飛盤一樣直接把整個元素丟給你,然後說:「拿著,自己處理吧。」
你想透過手動索引清單來顯示你的聰明才智?太可惜了。 Python已經知道你想要什麼,直接餵給你。
Python的列表推導式是for迴圈的墳墓。
想建立一個新列表,其中每個數字都是原來的兩倍?在其他任何語言中,這都需要3到4行程式碼。 Python則輕鬆地展示了它的單行程式碼技巧:
<code class="language-python">doubled = [x * 2 for x in range(10)]</code>
這不只高效,還會讓你感覺自己在用某種秘密程式語言寫程式碼,凡人永遠無法理解。但代價是:你的for迴圈現在看起來像神祕的填字遊戲。
範例:
<code class="language-python">results = [f"Employee-{i}" for i in range(10) if i % 2 == 0]</code>
恭喜你!你剛剛寫了一行程式碼,兩週後連你自己都不懂它是什麼意思。
Python的for循環也喜歡以微妙的方式背叛你。這是一個經典錯誤:
意外的變數覆蓋
<code class="language-c">for (int i = 0; i < 10; i++) { printf("%d\n", i); }</code>
等等,什麼?我們不是把所有東西都換成「pineapple」了嗎?不! Python在角落偷笑,因為fruit
只是一個臨時變數。實際列表沒有被修改。
同時,JavaScript開發者則在暗自竊笑,因為他們知道可以用變數作用域問題來搞垮整個生產系統。
有時候,你既需要索引又需要值。 Python本來可以像其他語言一樣讓你使用無聊的i
。但它卻給了你enumerate(),這聽起來更像是一個公司術語,而不是一個程式函數。
<code class="language-python">for i in range(10): print(i)</code>
「enumerate」。真的嗎? Python,這不是董事會會議。放鬆點。
想在循環遍歷列表的同時修改它? Python會面無表情地看著你,然後說:
“你想太多了。”
範例:
<code class="language-c">char* fruits[] = {"apple", "banana", "cherry"}; for (int i = 0; i < 3; i++) { printf("%s\n", fruits[i]); }</code>
現在清單中缺少元素,因為Python中途迷路了。如果Python是個服務員,這就等於在你還沒吃完之前就把你的桌子清理乾淨了。
嘗試在Python中寫一個經典的無限循環。你知道的,為了好玩。以下是C語言的寫法:
<code class="language-python">fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit)</code>
以下是Python的版本:
<code class="language-python">doubled = [x * 2 for x in range(10)]</code>
它確實有效,但感覺很奇怪。 Python甚至沒有嘗試去模仿一個經典的無限循環。它只是一個……無盡的真理。
結論:Python的for循環並沒有很糟-是我們自己不行
事實是,Python的for迴圈並沒有那麼糟。只是我們自己被寵壞了。 Python的循環非常直觀、簡潔且強大,以至於我們忘記了手動追蹤索引或處理段落錯誤的痛苦。
所以,下次你抱怨Python的for循環時,記住這一點:Python並沒有很糟。它只是厭倦了牽著你的手。
以上是Python 的 For 循環很糟糕——這正是我們喜歡它的原因的詳細內容。更多資訊請關注PHP中文網其他相關文章!