Python - 我需要一个永远运行的连续循环,我知道这是不好的做法,但使用 while True 合适吗?

问题描述 投票:0回答:4

是否有更好的替代方案来创建永久循环(不是 while True),或者我很好奇使用 while True 是否可以:)我只是想无限期地轮询一些东西并想要完成所有这一切具有良好的编码习惯:) 谢谢您的宝贵时间!!

刚刚尝试过 while True (效果很好,但想知道是否有更好的替代方案,因为依赖它感觉不对)

python python-3.x while-loop iteration
4个回答
2
投票

一个小实验,查看字节码:

>>> 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)
>>> 

但我想说这也是最清晰的


1
投票

创建无限循环的常用且“Pythonic”方式(假设你真的想要一个)确实是

while True:
。当然,你不应该忘记在某个地方有一个
break
(有实际的被执行的机会)。


0
投票

对于菜单选择

如果您需要连续循环(无限循环)进行菜单选择(带有“退出”选项之类的内容),则可以使用普通的

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.

关于 while-true 循环

由于 Python 没有“do while”循环语义,因此我们有时会使用

while true
/
break
循环。关于 while-true 循环,希望以下讨论对您有所帮助;)

Stack Overflow: while (true) 会破坏不好的编程习惯吗?


-1
投票
while True:
    do_something()

这是最好的解决方案。
或者,您可以尝试:

while 1 == 1: #(or "a" == "a", you get it)
    do_something()
© www.soinside.com 2019 - 2024. All rights reserved.