Python - 我需要一个将永远 运行 的连续循环,我知道它的不良做法但是使用 while True 是否合适?
Python - I need a continuous loop that will run forever, I know its bad practice but would using while True be appropriate?
是否有更好的替代方法来创建永久循环(不是 while True)或者我很想知道使用 while True 是否可以:) 我只是想无限期地轮询一些东西并且想要通过良好的编码实践来完成这一切:)
感谢您的宝贵时间!!
刚刚尝试过 while True(效果很好,但想知道是否有更好的选择,因为依赖它感觉不对)
创建无限循环(假设您真的想要一个)的常用“Pythonic”方法确实是 while True:
。当然你不应该忘记在某个地方有一个break
(它有被执行的实际机会)。
while True:
do_something()
这是最好的解决方案。
或者,您可以尝试:
while 1 == 1: #(or "a" == "a", you get it)
do_something()
一个小实验,查看字节码:
>>> 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)
>>>
但我会说它也是最清晰。
是否有更好的替代方法来创建永久循环(不是 while True)或者我很想知道使用 while True 是否可以:) 我只是想无限期地轮询一些东西并且想要通过良好的编码实践来完成这一切:) 感谢您的宝贵时间!!
刚刚尝试过 while True(效果很好,但想知道是否有更好的选择,因为依赖它感觉不对)
创建无限循环(假设您真的想要一个)的常用“Pythonic”方法确实是 while True:
。当然你不应该忘记在某个地方有一个break
(它有被执行的实际机会)。
while True:
do_something()
这是最好的解决方案。
或者,您可以尝试:
while 1 == 1: #(or "a" == "a", you get it)
do_something()
一个小实验,查看字节码:
>>> 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)
>>>
但我会说它也是最清晰。