是否有更好的替代方案来创建永久循环(不是 while True),或者我很好奇使用 while True 是否可以:)我只是想无限期地轮询一些东西并想要完成所有这一切具有良好的编码习惯:) 谢谢您的宝贵时间!!
刚刚尝试过 while True (效果很好,但想知道是否有更好的替代方案,因为依赖它感觉不对)
一个小实验,查看字节码:
>>> import dis
>>> dis.dis('while True: statement')
1 >> 0 LOAD_NAME 0 (statement)
2 POP_TOP
4 JUMP_ABSOLUTE 0 (to 0)
甚至懒得检查
True
是否为真。只是执行一个无条件循环。因此,即使是 Python 编译器也认为这是特殊的东西,并将其视为最佳的东西。
为了比较,使用其他地方建议的
1 == 1
:
>>> dis.dis('while 1 == 1: statement')
1 0 LOAD_CONST 0 (1)
2 LOAD_CONST 0 (1)
4 COMPARE_OP 2 (==)
6 POP_JUMP_IF_FALSE 12 (to 24)
>> 8 LOAD_NAME 0 (statement)
10 POP_TOP
12 LOAD_CONST 0 (1)
14 LOAD_CONST 0 (1)
16 COMPARE_OP 2 (==)
18 POP_JUMP_IF_TRUE 4 (to 8)
20 LOAD_CONST 1 (None)
22 RETURN_VALUE
>> 24 LOAD_CONST 1 (None)
26 RETURN_VALUE
看看所有这些东西。加载值,比较它们,然后测试比较结果的真值并有条件地跳转。
总而言之,
True
并不是这方面唯一的最佳值:
>>> dis.dis('while 42: statement')
1 >> 0 LOAD_NAME 0 (statement)
2 POP_TOP
4 JUMP_ABSOLUTE 0 (to 0)
>>> dis.dis('while "foo": statement')
1 >> 0 LOAD_NAME 0 (statement)
2 POP_TOP
4 JUMP_ABSOLUTE 0 (to 0)
>>>
但我想说这也是最清晰的。
创建无限循环的常用且“Pythonic”方式(假设你真的想要一个)确实是
while True:
。当然,你不应该忘记在某个地方有一个break
(有实际的被执行的机会)。
如果您需要连续循环(无限循环)进行菜单选择(带有“退出”选项之类的内容),则可以使用普通的
while
循环:
import sys # Optional for the 'Safeguard'
choice = 'any string you like' # Initializer
while not choice == 'q': # Substitute for a while-true-break loop.
choice = input('Choose 1-3. Q for Quit >> ').lower()
match choice:
case '1':
print('Spam')
case '2':
print('Spam and Spam')
case '3':
print('Spam, Spam, and Spam')
case _:
print('Ni!')
sys.exit(0) # Safeguard: Optional for unexpected input.
由于 Python 没有“do while”循环语义,因此我们有时会使用
while true
/break
循环。关于 while-true 循环,希望以下讨论对您有所帮助;)
Stack Overflow: while (true) 会破坏不好的编程习惯吗?
while True:
do_something()
这是最好的解决方案。
或者,您可以尝试:
while 1 == 1: #(or "a" == "a", you get it)
do_something()