【问题标题】:What does "while True" mean in Python?Python中的“while True”是什么意思?
【发布时间】:2011-04-14 20:29:30
【问题描述】:
def play_game(word_list):
    hand = deal_hand(HAND_SIZE) # random init
    while True:
        cmd = raw_input('Enter n to deal a new hand, r to replay the last hand, or e to end game: ')
        if cmd == 'n':
            hand = deal_hand(HAND_SIZE)
            play_hand(hand.copy(), word_list)
            print
        elif cmd == 'r':
            play_hand(hand.copy(), word_list)
            print
        elif cmd == 'e':
            break
        else:
            print "Invalid command."

什么是真的?

我认为说“虽然是真的”是简写,但这是为了什么?当变量“手”被赋值时?如果变量 'hand' 没有被赋值怎么办?

【问题讨论】:

  • True 是 1 的别名。我问的一个相关问题可以在这里找到stackoverflow.com/questions/885908/…
  • @Copas,True 不是1 的别名。尽管在许多语言中,1 在布尔上下文中计算为真值。
  • adamse:在 一些 版本的 Python 中,True 一直是 1 的别名,不是吗?虽然是的,但在最新版本的 Python 中有一个真正的布尔类型。
  • @adamse, @Ken: 引用What's new in Python 2.3 - PEP 285: "布尔类型被添加到 Python 2.3。__builtin__ 模块中添加了两个新常量,True 和 False。(True 和 False常量被添加到 Python 2.2.1 的内置函数中,但 2.2.1 版本只是简单地设置为整数值 1 和 0,并且不是不同的类型。)"。
  • @adamse 在 python 中它不是,但在许多语言中它是。我认为这是一个更普遍的问题。像 Baba 所说的那样对初学者说“True 是 1 的别名”是完全准确的。我同意 Python True 不是 1 的别名。我没有说它是。

标签: python syntax


【解决方案1】:

while True 表示永远循环。 while 语句接受一个表达式并执行循环体,而表达式的计算结果为 (boolean) "true"。 True 总是计算为布尔值“真”,因此无限期地执行循环体。这是一个成语,你最终会习惯的!您可能遇到的大多数语言都有相同的习语。

请注意,大多数语言通常都有一些提前跳出循环的机制。对于 Python,它是您问题中示例的 cmd == 'e' 案例中的 break 语句。

【讨论】:

  • 为了清楚起见,我相信您可以在大多数语言中使用 while(true == true)。这可能有助于新程序员更好地理解其背后的逻辑。
  • 克里斯,while True==True 很丑。和while 'apples'!='oranges' 一样丑陋:)
  • 正如我的一位老师所指出的:如果您认为true==true 是一种改进,您会在哪里停下来? (true==true)==true 不是更好吗?
  • @Chris,最终应该意识到可以使用布尔值或变量来代替逻辑表达式,并且“最终”应该尽快。
  • @Mark 最后应该意识到,有时需要一些额外的帮助才能让新程序员理解布尔逻辑等。我所做的只是帮助他理解它。
【解决方案2】:

True 为真——即总是。这是一个无限循环

请注意这里True 是语言中表示特定类型的常量值的关键字与数学概念“true”之间的重要区别。

【讨论】:

  • 从技术上讲,你错了。该结构的意思是“当真不假”。如果您在 C 中编写 while(5),您可以看到区别,其中没有适当的布尔值。不是while(5==1),而是while(5!=0)
  • 我认为说'无限循环'更合适。假设必须是循环将在某个点被中断或返回中断。真正的“无限”循环是程序员的错误; “无限循环”是由设计创建的。
  • @Blindy:在具有自动强制转换功能的弱类型语言中,您可以说 x '评估为' y ...这不是 5 不严格等于 0,而是 5 大致等于为真。
  • @Blindy, while(5) 在 C 中的意思是 5 是真的,而不是它的 true0,这是完全不同的东西。 5 总是正确的。通常,当语言有关键字true 时,它是一个真实的常量,但不是唯一真实的常量。同样false 不一定是唯一为假的值。
【解决方案3】:

True 总是True,所以while True 将永远循环。

while 关键字接受一个表达式,并在表达式为真时循环。 True 是一个始终为真的表达式。

作为一个可能澄清的例子,请考虑以下内容:

a = 1
result = a == 1

在这里,a == 1 将返回True,因此将True 放入result。因此,

a = 1
while a == 1:
  ...

相当于:

while True:
  ...

前提是您没有在 while 循环内更改 a 的值。

【讨论】:

  • True 不是总是 True,例如True = False。 ;-)
  • @jathanism- 真理就是真理,到了尽头。
【解决方案4】:

while 循环采用条件参数(意思是通常为真或假,或者可以解释为这样的东西),并且仅在条件产生 True 时执行。

至于while True?好吧,最简单的真条件是True 本身!所以这是一个无限循环,通常在需要大量循环的游戏中很好。 (不过,从我的角度来看,更常见的是将某种“完成”变量设置为 false,然后将其设为 true 以结束游戏,循环看起来更像 while not done: 或其他。)

【讨论】:

    【解决方案5】:

    while 循环继续循环,直到条件为假。例如(伪代码):

    i = 0
    while i < 10
      i++
    

    随着循环的每次迭代,i 将递增 1,直到为 10。此时,条件 i &lt; 10 不再为真,循环将完成。

    由于while True 中的条件明确且始终为true,因此循环将永远不会结束(直到它以其他方式中断,通常通过循环体内的break 之类的构造)。

    【讨论】:

      【解决方案6】:

      在某些语言中,True 只是数字的别名。您可以通过阅读更多关于 boolean logic 的信息来了解更多原因。

      【讨论】:

        【解决方案7】:

        我的问题:什么是真实的?

        TrueTrue

        只要条件表达式的计算结果为True,while 循环就会运行。

        由于True 的计算结果始终为True,循环将无限期地运行,直到循环内出现returns 或breaks。

        【讨论】:

        • 这是python。没有括号表达式;P
        • 嘿,好点子。我不习惯用 Python 思考。虽然我想如果你愿意,可以在它周围加上括号......
        【解决方案8】:

        我的问题:什么是真实的?

        while 语句 () 中的所有内容都将被评估为布尔值。这意味着它被转换为真或假。

        在声明中考虑while(6 &gt; 5)

        它首先计算表达式6 &gt; 5,即true,因此与while(true)相同

        任何不是 FALSE、0、空字符串“”、null 或 undefined 的值都可能被评估为 true。

        当我第一次开始编程时,我曾经做过if(foo == true) 这样的事情,我没有意识到这与if(foo) 几乎是一回事。

        所以当你说 while(true) 时,就像是在说 while(true == true)

        所以回答你的问题:虽然 TRUE 是 True。

        【讨论】:

          【解决方案9】:

          没有什么比True 更快地计算为True。因此,最好使用while True 而不是while 1==1 等。

          【讨论】:

            【解决方案10】:

            在这种情况下,我想它可以解释为

            do
            ...
            while cmd  != 'e' 
            

            【讨论】:

              【解决方案11】:

              形式上,True 是 Python built-in constantbool 类型。

              您可以在 bool 类型上使用 Boolean operations(例如在交互式 python 提示符下),在 bool 类型上使用 convert numbers

              >>> print not True
              False
              >>> print not False
              True
              >>> print True or False
              True
              >>> print True and False
              False
              >>> a=bool(9)
              >>> print a
              True
              >>> b=bool(0)
              >>> print b
              False
              >>> b=bool(0.000000000000000000000000000000000001)
              >>> print b
              True
              

              您所看到的和 Python 编译器看到的可能存在“陷阱”:

              >>> n=0
              >>> print bool(n)
              False
              >>> n='0'
              >>> print bool(n)
              True
              >>> n=0.0
              >>> print bool(n)
              False
              >>> n="0.0"
              >>> print bool(n)
              True
              

              作为 Python 如何在内部存储 bool 类型的提示,您可以将 bool 类型转换为整数,True 将为 1,False 0:

              >>> print True+0
              1
              >>> print True+1
              2
              >>> print False+0
              0
              >>> print False+1
              1
              

              其实Python的bool类型是Python的int类型的子类:

              >>> type(True)
              <type 'bool'>
              >>> isinstance(True, int)
              True
              

              您的问题中更重要的部分是“while True 是什么?”是“什么是真的”,以及一个重要的推论:什么是假的?

              首先,对于您正在学习的每种语言,了解该语言认为“真实”和“虚假”的内容。例如,Python 认为 TruthPerl Truth 略有不同。其他语言有slightly different concepts 的真/假。 了解您的语言对于不同的操作和流程控制认为什么是真假,以避免以后出现很多麻烦!

              在许多算法中,您希望处理某些内容,直到找到您要查找的内容。因此infinite loop 或无限循环。对于这些结构,每种语言都有自己的习惯用法。以下是常见的 C 无限循环,也适用于 Perl:

              for(;;) { /* loop until break */ }
              
              /* or */
              
              while (1) {
                 return if (function(arg) > 3);
              }
              

              while True: 形式在 Python 中很常见,用于以某种方式跳出循环的无限循环。学习 Python flow control 以了解如何摆脱 while True 循环。例如,与大多数语言不同,Python 可以在循环中包含 else 子句。最后一个链接有一个例子。

              【讨论】:

                【解决方案12】:
                while True:
                    ...
                

                表示无限循环。

                while 语句通常用于有限循环。但是使用常量 'True' 可以保证 while 语句的重复,而不需要控制循环(例如在迭代中设置一个布尔值),除非你想打破它。

                事实上

                True == (1 == 1)
                

                【讨论】:

                  【解决方案13】:

                  而真正的意思是无限循环,这通常由长进程使用。 你可以改变

                  while True:
                  

                  while 1:
                  

                  【讨论】:

                    【解决方案14】:

                    直接回答您的问题:while 循环条件为 True。在这段特殊的代码中,它总是如此。

                    【讨论】:

                      【解决方案15】:

                      在出现相反的情况之前,任何事情都可以被视为真。这就是二元性的工作方式。这是一种比较对立面的方式。黑色可​​以为真,直到白色为假。黑色也可以为假,直到白色为真。它不是一种状态,而是对立状态的比较。如果其中一个为真,则另一个是错误的。 True 并不意味着它是正确的或被接受。这是一种相反的状态总是假的。这是二元性。

                      【讨论】:

                        【解决方案16】:

                        虽然这些答案中的大多数在不同程度上是正确的,但没有一个像我想要的那样简洁。

                        简而言之,使用while True: 只是一种运行循环的方法,该循环将继续运行,直到您使用breakreturn 显式中断它为止。由于 True 将始终评估为 True,因此您必须在需要时强制循环结束。

                        while True:
                            # do stuff
                        
                            if some_condition:
                                break
                        
                            # do more stuff - code here WILL NOT execute when `if some_condition:` evaluates to True
                        

                        虽然通常会设置循环运行,直到 while 条件为假,或者它到达预定义的终点:

                        do_next = True
                        
                        while do_next:
                        
                            # do stuff
                        
                            if some_condition:
                                do_next = False
                        
                            # do more stuff - code here WILL execute even when `if some_condition:` evaluates to True
                        

                        这两个代码块有效地做同样的事情

                        如果您的循环评估的条件可能不是您直接控制的值,例如用户输入值,那么通常需要验证数据并显式中断循环,因此您应该这样做使用任何一种方法。

                        while True 格式更符合 Python 风格,因为您知道 break 在该点打破循环,而 do_next = False 可以在下一次评估 do_next 之前做更多的事情。

                        【讨论】:

                          【解决方案17】:

                          虽然 True 意味着循环将无限运行,但在 while 循环中没有提及中断它的条件。

                          您可以使用“break”或“return”来中断代码

                          >>> a = ['foo', 'bar', 'baz']
                          >>> while True:
                          ...     if not a:
                          ...         break
                          ...     print(a.pop(-1))
                          ...
                          baz
                          bar
                          foo
                          

                          从 realpython.com 复制的代码

                          【讨论】:

                            猜你喜欢
                            • 2021-02-07
                            • 2016-08-19
                            • 2015-07-11
                            • 1970-01-01
                            • 2016-08-30
                            • 1970-01-01
                            • 2012-03-12
                            • 1970-01-01
                            • 2014-04-06
                            相关资源
                            最近更新 更多