轉(zhuǎn)載請(qǐng)注明出處:http://m.itdecent.cn/p/6f7102153a1c
本文出自Shawpoo的簡(jiǎn)書(shū)
我的博客:CSDN博客

【Python學(xué)習(xí)筆記專欄】:http://blog.csdn.net/column/details/17658.html
一、迭代器
在 Python 中,最常用的循環(huán)結(jié)構(gòu)是for語(yǔ)句,它可以用來(lái)對(duì)容器成員進(jìn)行迭代操作。迭代是 Python 中最強(qiáng)大的功能之一 。迭代器有以下幾個(gè)特點(diǎn):
- 迭代器是一個(gè)可以記住遍歷位置的對(duì)象。
- 迭代器對(duì)象從集合的第一個(gè)元素開(kāi)始訪問(wèn),直到所有的元素被訪問(wèn)完結(jié)束。
- 迭代器只能往前進(jìn)行訪問(wèn),不能后退。
迭代器有兩個(gè)基本的方法:iter() 和 next()。
字符串、列表和元組對(duì)象都可以創(chuàng)建迭代器:
如字符串和列表創(chuàng)建迭代器:
str = "ABCDEF"
it = iter(str) # 創(chuàng)建迭代器
print(next(it)) # 輸出迭代器的下一個(gè)元素
print(next(it))
輸出結(jié)果:
A
B
list = [1, 2, 3, 4]
it = iter(list) # 創(chuàng)建迭代器
print(next(it)) # 輸出迭代器的下一個(gè)元素
print(next(it))
輸出結(jié)果:
1
2
當(dāng)元素迭代到最后一個(gè)的時(shí)候,再次調(diào)用 next() 方法的時(shí)候,會(huì)報(bào)
StopIteration 的一個(gè)異常。
二、生成器
生成器(generator)是一種用普通函數(shù)語(yǔ)法定義的迭代器。但是,跟普通函數(shù)不同的是,生成器是一個(gè)返回迭代器的函數(shù),只能用于迭代操作,更簡(jiǎn)單點(diǎn)理解生成器就是一個(gè)迭代器。在 Python 中,可以認(rèn)為使用了 yield 的函數(shù)被稱為生成器。
在調(diào)用生成器運(yùn)行的過(guò)程中,每次遇到 yield 時(shí)函數(shù)會(huì)暫停并保存當(dāng)前所有的運(yùn)行信息,返回 yield 的值。并在下一次執(zhí)行 next() 方法時(shí)從當(dāng)前位置繼續(xù)運(yùn)行。
下面通過(guò)生成一個(gè)斐波那契數(shù)列的例子來(lái)說(shuō)明一下:
num = 10 # 顯示前10位
def func(): # 生成器函數(shù) - 斐波那契
a, b = 0, 1
for n in range(num):
a, b = b, a + b
yield a
f = func() # f 是一個(gè)迭代器,由生成器返回生成 <generator object func at 0x000001AD59BC69E8>
for n in range(num):
print(next(f), end=" ")
運(yùn)行結(jié)果:1 1 2 3 5 8 13 21 34
最后:在Python中,關(guān)于迭代器和生成器的內(nèi)容還有很多,暫時(shí)先學(xué)習(xí)這么多,后續(xù)慢慢補(bǔ)充!