注意,這裏說的Python3裏面的range函數,和Python2是不一樣的,返回的不是列表,是可迭代對象。python
在python3中,若是執行下面的語句函數
print(range(10))
獲得結果是 range(0,10) ,而不是指望的[0,1,2,3,4,5,6,7,8,9]。可是若是換一種方式對象
print(list(range(10)))
獲得的結果倒是blog
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
那爲何會這樣呢?其實在Python3中range()函數返回的對象很像一個列表,可是它確實不是一個列表,它只是在迭代的狀況下返回指定索引的值,它並不會在內存中產生一個列表對象,官方解釋說這樣作是爲了節約內存空間。一般咱們稱這種對象是可迭代的,或者是可迭代對象。索引
這裏就要引入另一個叫迭代器的概念,迭代器能夠從一個可迭代對象中連續獲取指定索引的值,直到索引結束。好比list()函數,因此在上面的例子中,咱們能夠用list()這個迭代器將range()函數返回的對象變成一個列表。內存
由此能夠看出:range()函數返回的是一個可迭代對象(類型是對象),而不是列表類型;list() 函數是對象迭代器,把對象轉爲一個列表,返回的變量類型爲列表。class