1

可能重复:
为什么要避免 while 循环?

我正在尝试通过学习 Python The Hard Way来学习 Python ,随着我的进步,我发现它在网站上提到,

仅使用 while 循环来永远循环,这意味着可能永远不会。这仅适用于 Python,其他语言不同。

现在我基本上是一名 Java 开发人员,这让我想知道为什么while在 python 中应该避免使用它,尽管它在 Java 中被广泛使用。我一直无法在互联网上找到任何答案。

4

6 回答 6

3

这种说法是非常主观的,我不确定我是否同意。while在 Python 中使用无限循环很容易:

  while True:
       # do stuff

也许作者将其与 C 进行比较,C 中也很容易使用 for 进行无限循环:

  for(;;)
      /* do stuff */

对于 Python,真正不存在这样的相应构造。

话虽如此,有很多情况下无限循环很有用(在任何语言中) - 想想事件循环,或者可以通过无限循环来简化循环控制并且只有某些条件会导致break.

您经常会处理诸如列表和字符串之类的序列,并且使用 for 循环将是一个自然的选择,但我不会仅仅因为这个而忽略 while 循环。

于 2012-07-03T10:54:29.840 回答
3

他在练习 33中说:

这是while循环的问题:有时它们不会停止。

如果您知道自己在做什么,这并不是真正的 Python 问题。;)

于 2012-07-03T10:58:48.433 回答
1

for当您想要迭代一定次数时,它几乎是 Python 中的“默认”选择。例如:

for i in xrange(10):
    #do stuff
    #iterates 10 times

for an_element in a_collection:
    #do stuff
    #iterates over every element in a collection
    #though generators can be "infinite"

但是,如果您想无限次循环代码,则while循环更为惯用。

while a_boolean: 
    #do stuff
    #iterates as long as a_boolean evaluates to True

while True:
    #do stuff
    #iterates till a break is encountered

由于您来自 Java 背景,while因此 Python 中的循环与 Java 中的循环几乎相同,while并且使用方式也几乎相同。Python 中的for循环类似于:

 for(Integer i : anArrayListOfIntegers){
     //do stuff
 }

for(int i=0;i<10;i++)Python 中不存在该表单,而是使用range()/xrange()第一个示例中的表单。也就是说,除了列表推导/生成器表达式等情况外,每个for循环都可以替换为等效循环。while

就速度或内存使用而言,这样做没有真正的优点或缺点。然而,Python 程序员倾向于for在迭代集合时使用,以及while当他们想要在条件为真直到条件为真时进行迭代。如果你坚持这个一般的经验法则,你可能不会出错。

于 2012-07-03T11:10:40.860 回答
1

学习 Python The Hard Way 相当固执己见,所以我不认为这意味着你永远不应该使用while. 我最好的猜测是,因为迭代器是 Python 中普遍存在的模式,所以大多数实际迭代都可以使用for..in. Java 有使用的旧Iterator模式while (it.hasNext()) { … },或类似的读取 JDBCResultSet或从标准输入读取行的模式——所有这些都可以用for..inPython 中的 a 来实现。(可行并且可以说应该这样做;for..in更具可读性,并且yield可以轻松编写常规可迭代对象,因此库没有理由不公开迭代器 API。)

于 2012-07-03T10:59:41.177 回答
1

没有什么鬼主意。事实上,while它是 Python 中唯一的“经典”循环方式,因为for它与foreach其他语言中的类似(即遍历集合或迭代器的运算符)。

于 2012-07-03T10:56:54.160 回答
1

Python中的循环没有任何问题,while当您不处理可迭代对象时,它就占有一席之地。

但是如果你正在处理一个可迭代的(并且这个概念在 Python 中非常普遍),for循环总是更好的构造。

例如,在许多语言中,您会编写如下内容:

while(! file.EOF) {
    ...
}

在 Python 中,您使用:

for line in file:
    do_something_with(line)
于 2012-07-03T10:57:18.683 回答