【问题标题】:What does "while False" mean?“虽然是假的”是什么意思?
【发布时间】:2017-11-12 09:10:40
【问题描述】:

我不明白这段代码是如何工作的:

i = 1
while False:
    if i % 5 == 0:
        break
    i = i + 2
print(i)

while False 是什么?什么是假的?没看懂……

【问题讨论】:

  • while False => 一个永远不会运行的循环。
  • @capybara,您可以通过运行此代码来完成。你为什么在stackoverflow上问这个。

标签: python python-3.x while-loop


【解决方案1】:

while loop 在每次迭代之前检查while 后面的条件(即表达式),并在条件为False 时停止执行循环体。

所以while False 意味着循环体永远不会执行。循环内的所有内容都是“死代码”。 Python-3.x 会走这么远,因为它“优化”了while-loop:

def func():
    i = 1
    while False:
        if i % 5 == 0:
            break
        i = i + 2
    print(i)

import dis

dis.dis(func)

提供以下内容:

  Line        Bytecode

  2           0 LOAD_CONST               1 (1)
              3 STORE_FAST               0 (i)

  7           6 LOAD_GLOBAL              0 (print)
              9 LOAD_FAST                0 (i)
             12 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             15 POP_TOP
             16 LOAD_CONST               0 (None)
             19 RETURN_VALUE

这意味着编译后的函数甚至不会知道有一个 while 循环(第 3-6 行没有说明!),因为不可能执行 while 循环。

【讨论】:

  • 如何将 py 转换为 ast?
  • @SzabolcsDombi 这不是抽象语法树,而是反汇编的字节码。您可能想查看the dis module documentation 了解更多信息。但一般来说,您可以使用提到的import dis 后跟dis.dis(the_function) 来“获取字节码”。
  • @SzabolcsDombi fwiw,你可以import astast.dump(ast.parse(s)),假设你有源代码s。你无法获得函数的 ast,因为该信息在运行时不容易获得
【解决方案2】:
while True:

表示它将永远循环。

while False:

表示它不会执行。

【讨论】:

  • 我不知道为什么这个答案被否决了。它不像其他的那么详细,但它并没有错,它并不意味着回答者没有费心阅读问题,它不应该得到负分。
【解决方案3】:

它是说如果某些事情不正确,请执行此操作。例如:

while (0 == 1) == False: # this statement is true because 0 does not equal 1
     print('hi') # this will create a infinite loop of hi.

同时。

while (0 == 0) == False: # this statement is false since 0 does equal 0.
     print('hi') # this will do nothing since the past statement is false.

【讨论】:

    【解决方案4】:

    由于while False 从未运行,它是否也可以用作一种“注释”来禁用您要调试或删除但不删除的代码部分?我知道有很多更好的方法可以做到这一点,但这只是我想到的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      • 2013-03-09
      相关资源
      最近更新 更多