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中文网其他相关文章!