在C語言中,如果想要循環一個變量從1到100,要怎么寫呢?
for(i = 1,i<=100,i++)
你在C的代碼中,幾乎隨處可見上面的for循環。Python非常貼心,為我們設計了range函數,直接實現上面的功能。range函數是內置函數,無須特別導入,在任何地方都可以直接使用它。下面看一下具體用法:
1.提供一個數字參數,直接遍歷數字:
for i in range(10): print(i) ## 結果: 0 1 2 3 4 5 6 7 8 9
從結果中,可以看出,只給一個數字類型參數,range會遍歷從0到參數減1的數字。要特別注意,range默認從0開始,到參數減1,也就是左閉右開的規則,這也是Python很多地方的規則,比如切片。
2.也可以指定遍歷的區間:
for i in range(1, 12): print(i) ## 結果: 1 2 3 4 5 6 7 8 9 10 11
類似range(1, 12)
的調用,會遍歷從1到11的數字,左閉右開.
3.還可以指定步長,就像切片一樣
for i in range(1, 12, 2): print(i) ## 結果: 1 3 5 7 9 11
4.但更多的時候是結合range和len函數,遍歷一個序列的索引
a = ['Google', 'Baidu', 'Huawei', 'Taobao', 'QQ'] for i in range(len(a)): print(i, a[i]) # i代表索引,a[]代表類表中的元素
range函數是Python使用頻率非常高的一個內置函數,它除了以上的使用特點外,還具有類似生成器的特性,這里先看個例子:
for i in range(1000000000000000000000000000000000): print(i) if i > 10: break
range的參數是個多大的數我反正是眼花了,數不過來,但可以肯定的是,如果為了實現這個for循環,而事先在內存中准備好從1到10000000000000000000000000這么多個數,那么你的內存肯定溢出了,死機是正常的。不用懷疑,大多數情況下程序都是這么干的。不同的是,range在內部的實現機制上,並不會直接在內存中一次性生成如此多的數,而是需要一個就生成一個,然后返回一個,這樣不但節省了內存,也防止了上面例子中數字過大而無法表示的情況。
另外要注意,range下面的用法,不會有任何結果,也不會彈出異常:
>>> for i in range(1, 10, -2): print(i) # 什么都沒發生 >>> for i in range(10, 1): print(i) # 什么都沒發生 >>>
但是如果這么做,卻是可以的:
>>> for i in range(10,1,-1):print(i) 10 9 8 7 6 5 4 3 2
總結出什么經驗了嗎?如果你要用負數步長,那么你的區間設定就要從大到小;如果你的區間設定是從大到小,那么你就需要使用負數步長,這和列表的切片特性是一樣樣的。