【问题标题】:In Python, how does a for loop with `range` work?在 Python 中,带有 `range` 的 for 循环如何工作?
【发布时间】:2018-08-13 13:50:09
【问题描述】:
for number in range(1,101): 
    print number

有人能解释一下为什么上面的代码会打印 1-100 吗?我知道 range 函数不包括指定范围内的最后一个数字,但是,语法的“数字”部分是什么?

我更习惯于 C++ 和 Java,我会编写如下代码:

for (i = 1; i < 101; i++) {
   System.out.println(i);
   i++;
}

那么“数字”到底是什么?我确定我对此研究得太远了,有一个简单的问题。

【问题讨论】:

  • 由于return,Java/C++ sn-p 将在第一个i++ 之前停止执行。

标签: python


【解决方案1】:

number 等同于 C 循环中的 i,即,它是一个 变量,用于保存每次循环迭代的值。

将您的 Python 代码简单地翻译成 C 会产生以下结果:

for (int number = 1; number < 101; number++) {
  printf("%d\n", number);
}

【讨论】:

  • 谢谢伙计。这使它更容易。递增过程是怎样的?
  • range() 返回一个序列(行为类似于数字列表的抽象),并且“for number in...”被称为“迭代序列”。 C 版本中的序列没有精确的类比,但范围序列的元素之间的关系是“增量”发生的地方。
【解决方案2】:

Python 2.7 documentation 状态:

范围([开始],停止[,步骤])¶

这是一个多功能的创建函数 包含算术的列表 级数。它最常用于 for 循环。论据必须简单明了 整数。如果 step 参数是 省略,默认为 1。如果 start 参数被省略,它默认 为 0。完整的形式返回一个列表 纯整数 [start, start + step, 开始 + 2 * 步,...]。如果步骤是 正,最后一个元素是 最大开始 + i * 步小于 停止;如果 step 为负数,则最后一个 元素是最小的开始 + i * 步大于停。步绝不能 为零(否则引发 ValueError)

编辑:您可能还想查看xrange。 编辑:所以基本上:

for ( start ; stop ; step )
range( start, stop, step ) // where start and step are optional

【讨论】:

    【解决方案3】:

    正如 JG 所说,数字是你的变量(很像 C 代码中的 i)。 python 中的 for 循环真的很像 C# 中的 foreach 循环(我认为 Visual C++ 也有)。基本上,它遍历一个容器。所以你也可以在列表中使用该语法:

    fib = [0,1,1,2,3,5,8]
    for number in fib:
        print number
    

    范围对象有点像一个容器,包含 a 和 b 之间的所有数字。

    【讨论】:

      【解决方案4】:

      对于具有面向对象或过程语言(c、Java 等)经验的 Python 新程序员来说,这是一个稍微令人困惑的问题

      这些语言之间的区别在于 Python 不支持在 C、Java 等中经常使用的“计数”式迭代:

      for(i = 0; i < 10; i++){
      ...
      }
      

      相比之下,Python 只实现了一个类似于面向对象语言的 Iterator 接口的 for (Java 程序员会熟悉这个):

      for object in object_list
          ....
      

      因此,在您的示例中,“range”[1,101] 是包含从 1 到 100 的所有数字的列表 (object_list),“number”是代替每个数字的迭代器(对象)

      【讨论】:

        【解决方案5】:

        number 是一个变量,其中放置了范围内的每个值。

        range 实际上返回一个迭代器,for 负责将它推进整个范围。

        【讨论】:

          【解决方案6】:

          范围是从 1 到 100 的数字列表。

          number 然后引用该列表中的每个对象

          【讨论】:

            猜你喜欢
            • 2010-11-20
            • 1970-01-01
            • 2022-07-07
            • 2016-12-21
            • 1970-01-01
            • 1970-01-01
            • 2018-12-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多