为什么python FOR循环没有控制结构?

时间:2013-11-19 00:03:14

标签: python loops for-loop

在Java中,我们可以像这样使用FOR循环

for (i = 0; i < 10; i += 1) {

}

然而,这在Python中是不可能的; FOR只能在“foreach”意义上使用,循环遍历可迭代中的每个元素。

为什么FOR循环的控件结构在Python中遗漏了?

4 个答案:

答案 0 :(得分:8)

The Zen of Python说“应该有一个 - 最好只有一个 - 显而易见的方法。”Python已经有了这样做:

for i in xrange(10):
    pass

如果你想明确所有部分,你也可以这样做:

for i in xrange(0, 10, 1):
    pass

因为它已经有了“明显”的方法,所以添加另一种方式将是不合理的。 (那会是“nez”吗?)

(注意:在Python 3中,使用range代替xrange。)

C风格的for循环具有更大的灵活性,但最终你可以用Python的while(或者C while编写一个等效的循环),这不仅触及“一个明显的方式”原则,还有“简单比复杂”等。这当然是品味问题 - 在这种情况下,Guido van Rossum的品味。

答案 1 :(得分:3)

由于这是可以追溯到Python 0.x迷雾的问题之一(事实上,最有可能是它的前身ABC),唯一能够真正回答的人是Guido,然后才会记得。你可以尝试让他在他的History of Python博客上写一篇文章。

但是,有一些很好的理由。

首先,只有一种形式的for而不是两种不同的形式,使得语言更小,更容易学习和阅读人类,并且更容易解析计算机。

没有&#34; foreach&#34; -style for循环导致许多逐个错误,并使许多简单的代码更加冗长。

没有C风格的for循环会使一些已经非常复杂的for循环变得更加复杂,因为强制它们是while循环。它并不影响像你这样的简单循环,它可以写成&#34; foreach&#34;循环,如for i in range(10): - 更简洁,更易读,更容易出错。*

当看这种方式时,选择是显而易见的。


*实际上,即使复杂的循环也可以通过迭代器转换为foreach循环。有时这是一个好主意。例如,for (int i=2; i=next_prime(i); i<1000000)真的比for i in takewhile(lambda i: i<1000000, generate_primes()):好吗?有一个原因,C ++逐渐增加了使后者成为可能的功能,以避免你可以轻易地用前者做出的错误...

答案 2 :(得分:1)

通常,迭代元素是更好的性能。您可以使用以下相同的结果:

for i in xrange(0, 20):
    pass

你应该彻底阅读python的zed: http://www.python.org/dev/peps/pep-0020/

答案 3 :(得分:0)

因为它只是一个while循环的语法糖

i = 0
while i < 10:
    # stuff
    i += 1

如果您在C-style-for循环中从未遇到过一个错误,请举手。这么想。