没有内容的while循环

布赖恩·达菲

我正在为猜谜游戏编写 Python 程序,并且我目前实现主循环的方式有效,但感觉不对:

# Guess Loop
while not(guess(ans)):
    pass

它会起作用,但我想知道这是否是不好的做法(我认为是)。

亚当·斯密

我更喜欢

while True:
    if guess(ans):
        break

但是你的代码

while not(guess(ans)):
    pass

功能相同。它甚至可能会稍微提高一点性能!

from dis import dis
from random import choice

def foo(): return choice([True, False])  # flip a coin

# My code
def bar1():
    while True:
        if foo(): break

# Your code
def bar2():
    while not(foo()):
        pass

>>> dis(bar1)
  2           0 SETUP_LOOP              12 (to 14)

  3     >>    2 LOAD_GLOBAL              0 (foo)
              4 CALL_FUNCTION            0
              6 POP_JUMP_IF_FALSE        2
              8 BREAK_LOOP
             10 JUMP_ABSOLUTE            2
             12 POP_BLOCK
        >>   14 LOAD_CONST               0 (None)
             16 RETURN_VALUE
>>> dis(bar2)
  2           0 SETUP_LOOP              10 (to 12)
        >>    2 LOAD_GLOBAL              0 (foo)
              4 CALL_FUNCTION            0
              6 POP_JUMP_IF_TRUE        10

  3           8 JUMP_ABSOLUTE            2
        >>   10 POP_BLOCK
        >>   12 LOAD_CONST               0 (None)
             14 RETURN_VALUE

您的代码段可以省略BREAK_LOOP那里的“ ”,这可能会提高性能。当然POP_JUMP_IF_TRUE也可能比POP_JUMP_IF_FALSE. 或相反亦然。

无论如何,它们的功能相同。使用您喜欢的任何一种。我更喜欢“永远循环,如果guess(ans)为真,则中断”的外观,而不是“循环直到否定guess(ans)为假”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

没有NSLog,while循环无法退出

来自分类Dev

while循环仍然没有异常

来自分类Dev

没有NSLog,while循环无法退出

来自分类Dev

Java中的While循环没有指令

来自分类Dev

While循环直到没有错误

来自分类Dev

while 循环没有给出预期的结果

来自分类Dev

我没有在 while 循环中定义

来自分类Dev

“while”循环没有正确迭代

来自分类Dev

条件 while 循环没有正确反应

来自分类Dev

跳过界河没有内容的文件名,而循环做

来自分类Dev

如果其中没有任何内容,循环会更快吗?

来自分类Dev

for 循环返回空,点击时没有显示任何内容

来自分类Dev

bash while循环:没有这样的文件或目录

来自分类Dev

内置方式模拟while循环而没有副作用

来自分类Dev

在我的while循环值中没有存储

来自分类Dev

While循环不检查条件,如果没有语句

来自分类Dev

在C fork中,while()循环后printf()没有执行

来自分类Dev

只要没有错误,如何运行while循环

来自分类Dev

为什么我的while循环没有终止?

来自分类Dev

为什么在Python中没有while循环

来自分类Dev

C shell while循环堆栈没有那么深

来自分类Dev

代码没有在while循环中退出(试图捕获异常)

来自分类Dev

bash while循环:没有这样的文件或目录

来自分类Dev

为什么我的while循环没有终止?

来自分类Dev

bash没有在while循环中列出文件

来自分类Dev

C#while循环没有结束

来自分类Dev

为什么 Bash 中的外部 while 循环没有完成?

来自分类Dev

bash while-for 循环没有正确执行

来自分类Dev

为什么这个while循环没有中断?