我正在为猜谜游戏编写 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] 删除。
我来说两句