轉(zhuǎn)載請注明出處:http://www.reibang.com/p/6f7102153a1c
本文出自Shawpoo的簡書
我的博客:CSDN博客
【Python學(xué)習(xí)筆記專欄】:http://blog.csdn.net/column/details/17658.html
一意狠、迭代器
在 Python 中蕉鸳,最常用的循環(huán)結(jié)構(gòu)是for語句歹啼,它可以用來對容器成員進(jìn)行迭代操作。迭代是 Python 中最強大的功能之一 。迭代器有以下幾個特點:
- 迭代器是一個可以記住遍歷位置的對象。
- 迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結(jié)束。
- 迭代器只能往前進(jìn)行訪問瑞凑,不能后退。
迭代器有兩個基本的方法:iter()
和 next()
概页。
字符串籽御、列表和元組對象都可以創(chuàng)建迭代器:
如字符串和列表創(chuàng)建迭代器:
str = "ABCDEF"
it = iter(str) # 創(chuàng)建迭代器
print(next(it)) # 輸出迭代器的下一個元素
print(next(it))
輸出結(jié)果:
A
B
list = [1, 2, 3, 4]
it = iter(list) # 創(chuàng)建迭代器
print(next(it)) # 輸出迭代器的下一個元素
print(next(it))
輸出結(jié)果:
1
2
當(dāng)元素迭代到最后一個的時候,再次調(diào)用 next()
方法的時候惰匙,會報
StopIteration
的一個異常技掏。
二、生成器
生成器(generator)是一種用普通函數(shù)語法定義的迭代器项鬼。但是哑梳,跟普通函數(shù)不同的是,生成器是一個返回迭代器的函數(shù)绘盟,只能用于迭代操作鸠真,更簡單點理解生成器就是一個迭代器悯仙。在 Python 中,可以認(rèn)為使用了 yield
的函數(shù)被稱為生成器吠卷。
在調(diào)用生成器運行的過程中锡垄,每次遇到 yield
時函數(shù)會暫停并保存當(dāng)前所有的運行信息,返回 yield
的值祭隔。并在下一次執(zhí)行 next()
方法時從當(dāng)前位置繼續(xù)運行货岭。
下面通過生成一個斐波那契數(shù)列的例子來說明一下:
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 是一個迭代器,由生成器返回生成 <generator object func at 0x000001AD59BC69E8>
for n in range(num):
print(next(f), end=" ")
運行結(jié)果:1 1 2 3 5 8 13 21 34
最后:在Python中疾渴,關(guān)于迭代器和生成器的內(nèi)容還有很多千贯,暫時先學(xué)習(xí)這么多,后續(xù)慢慢補充程奠!