在Python中,带有`range`的for循环如何工作?

时间:2010-07-13 23:24:26

标签: python

for number in range(1,101): 
    print number

有人可以向我解释为什么上面的代码打印1-100?我知道范围函数排除了指定范围内的最后一个数字,但是,语法的“数字”部分是什么?

我更习惯于C ++& Java我写的代码如下:

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

究竟是什么'数字'?我确定我对这个看起来太过分了,而且有一个简单的问题。

6 个答案:

答案 0 :(得分:24)

number相当于C循环中的i,即它是变量,它保存每次循环迭代的值。

将Python代码简单地翻译为C会产生以下内容:

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

答案 1 :(得分:9)

Python 2.7 documentation州:

  

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

     

这是一个多功能的创作功能   包含算术的列表   级数。它最常用于   for循环。论点必须清楚   整数。如果步骤参数是   省略,默认为1.如果   start参数被省略,默认为   完整的表单返回一个列表   普通整数[start,start + step,   开始+ 2 *步,...]。如果是的话   积极的,最后一个元素是   最大的开始+ i *步小于   停;如果步骤是否定的,则为最后一步   元素是最小的开始+ i *   步骤大于停止。一步不能   为零(否则引发ValueError)

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

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

答案 2 :(得分:1)

正如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之间的所有数字。

答案 3 :(得分:1)

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

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

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

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

for object in object_list
    ....

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

答案 4 :(得分:0)

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

范围实际上返回一个迭代器,而for负责将其推进到该范围内。

答案 5 :(得分:0)

range是数字1到100的列表。

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