我們先打開CMD,在交互式界面上看range的用法。
在Python3和Python2中,range是不一樣的,在cmd界面Python2中,打印range(10),會顯示[1,2,3,4,5,6,7,8,9]。顧頭不顧尾的原則,0要,10不要。
在cmd界面Python3中,打印range(10)。
Python3給我們做了一步空間上的優(yōu)化,它是一個迭代器,這個還是得到我們講可迭代對象的時候才能講。
我可以簡單的給你做個比喻,在Python2的range(10),相當(dāng)于給了我們一個筐,筐里裝了10個雞蛋。但是在Python3的range(10),相當(dāng)于給了我們一只可以下10個雞蛋的老母雞。
剛剛我們說Python3的range給我們做了一步空間上的優(yōu)化,大家現(xiàn)在想是一筐雞蛋更占空間還是一只會下蛋的老母雞更占空間,可能10個雞蛋不好判斷,那么1000個雞蛋和會下1000個雞蛋的老母雞那個更占空間?
肯定是1000個雞蛋更占空間,我們往更夸張的想法去想。如果你寫了一個range一個億,那Python2就真的會給你生成一個億數(shù)字的列表,直接把內(nèi)存給撐爆。但是Python3不會,因為是一個迭代器,一只會下蛋的老母雞它就只占一個內(nèi)存地址。你每次要下蛋的時候就給它發(fā)個請求,你給我下個蛋,它就會下個蛋。這樣能理解吧。
雖然Python2和Python3里面range有些不一樣,但是我們在for循環(huán)加range的時候用法還是一樣的。
for i in range(10):
print('于謙')
對于Python3來說,每次循環(huán)都是告訴這個可以下10個雞蛋的老母雞,給我下個蛋,直到把10個蛋全部下完,就循環(huán)了10次。
雖然原理不同,但是用法和結(jié)果還是一樣的,都會打印10次于謙。
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python for+range