哦,這就是真正牛X的程序員。不過,他也僅僅是牛X罷了,還不是大神。大神程序員是什么樣兒呢?他是掃地僧,大隱隱于市。
先搞清楚這些名詞再說別的:
循環(huán)(loop),指的是在滿足條件的情況下,重復(fù)執(zhí)行同一段代碼。比如,while語句。
迭代(iterate),指的是按照某種順序逐個(gè)訪問列表中的每一項(xiàng)。比如,for語句。
遞歸(recursion),指的是一個(gè)函數(shù)不斷調(diào)用自身的行為。比如,以編程方式輸出著名的斐波納契數(shù)列。
遍歷(traversal),指的是按照一定的規(guī)則訪問樹形結(jié)構(gòu)中的每個(gè)節(jié)點(diǎn),而且每個(gè)節(jié)點(diǎn)都只訪問一次。
對(duì)于這四個(gè)聽起來高深莫測(cè)的詞匯,在教程中,已經(jīng)涉及到了一個(gè)——循環(huán)(loop),本經(jīng)主要介紹一下迭代(iterate),看官在網(wǎng)上google,就會(huì)發(fā)現(xiàn),對(duì)于迭代和循環(huán)、遞歸之間的比較的文章不少,分別從不同角度將它們進(jìn)行了對(duì)比。這里暫不比較,先搞明白python中的迭代。之后適當(dāng)時(shí)機(jī)再比較,如果我不忘記的話,哈哈。
逐個(gè)訪問
在python中,訪問對(duì)象中每個(gè)元素,可以這么做:(例如一個(gè)list)
代碼如下:
>>> lst
['q', 'i', 'w', 's', 'i', 'r']
>>> for i in lst:
... print i,
...
q i w s i r
除了這種方法,還可以這樣:
代碼如下:
>>> lst_iter = iter(lst) #對(duì)原來的list實(shí)施了一個(gè)iter()
>>> lst_iter.next() #要不厭其煩地一個(gè)一個(gè)手動(dòng)訪問
'q'
>>> lst_iter.next()
'i'
>>> lst_iter.next()
'w'
>>> lst_iter.next()
's'
>>> lst_iter.next()
'i'
>>> lst_iter.next()
'r'
>>> lst_iter.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
做為一名優(yōu)秀的程序員,最佳品質(zhì)就是“懶惰”,當(dāng)然不能這樣一個(gè)一個(gè)地敲啦,于是就:
代碼如下:
>>> while True:
... print lst_iter.next()
...
Traceback (most recent call last): #居然報(bào)錯(cuò),而且錯(cuò)誤跟前面一樣?什么原因
File "<stdin>", line 2, in <module>
StopIteration
>>> lst_iter = iter(lst) #那就再寫一遍,上面的錯(cuò)誤暫且擱置,回頭在研究
>>> while True:
... print lst_iter.next()
...
q #果然自動(dòng)化地讀取了
新聞熱點(diǎn)
疑難解答
圖片精選