range()函數


在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

總結出什么經驗了嗎?如果你要用負數步長,那么你的區間設定就要從大到小;如果你的區間設定是從大到小,那么你就需要使用負數步長,這和列表的切片特性是一樣樣的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM