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