什麼是迭代器
可迭代物件
也就是說:
字串、列表、元組物件等暫時不是迭代器,暫時不能被迭代。但是,它們成為迭代器之後就可以被迭代了,如for迴圈。利用可迭代物件iterable建立迭代器iterator
l=[1
,2,3
,4]#l:可迭代物件
i=iter
(l)#i:迭代器
print
(next
(i))
#輸出1
print
(next
(i))
#輸出2
print
(i.__next__())
#輸出3
解釋:
注意:
遍歷完畢後,若再次呼叫next()函式,則會丟擲異常:stopiteration,處理此異常即可。處理stopiteration異常
try
: l=[1
,2] i=
iter
(l)print
(next
(i))
#輸出1
print
(next
(i))
#輸出2
print
(next
(i))
#丟擲異常
except stopiteration as stopiteration:
print
("遍歷完成"
)
刨析for迴圈for迴圈實現了序列的遍歷,那它怎麼實現的呢?for迴圈做的三件事:
建立迭代器
呼叫next方法
處理stopiteration異常
模擬for迴圈:
a=
[100
,200
,300
,400
,500]j=
none
i=iter
(a)#1.建立迭代器
while
(true):
try:
j=next
(i)#2.呼叫next方法
except stopiteration as stopiteration:
#3.處理stopiteration異常
break
print
(j)
結果:
100
200300
400500
什麼是生成器?
生成式生成器
a=
(x*x for x in
range(4
))print
(next
(a))
#輸出0
print
("---------------------"
)for i in a:
#輸出1、4、9
print
(i)
解釋:
函式生成器
def
get():
yield
1yield
2g=get(
)print
(next
(g))
#輸出1
print
(next
(g))
#輸出2
解釋:
函式生成器-send
def
func()
: count1 =
yield
1print
("count1="
, count1)
count2 =
yield
2print
("count2="
, count2)
yield
3g = func(
)print
(g.send(
none))
print
(g.send(2)
)
結果:
1
count1=
22
解釋:
可以得到無限多個斐波那契序列中的元素:
def
fib():
a=1 b=
1yield a
yield b
while
(true):
yield a+b
temp=a+b
a=bb=temp
f = fib(
)for i in
range(10
):print
(next
(f),end=
" ")
結果:
112
35813
2134
55
Python生成器與迭代器
生成器只有在用的時候會出現在記憶體中,對比列表全部存在記憶體中,減少了記憶體占用 next 函式 依次取生成器的值 s x 2 for x in range 1000 中括號是列表解析,小括號表示生成一系列值,就是生成器 s at 0x7fa20aa8b048 print next s 用next ...
python 迭代器與生成器
迭代器和生成器 print 1 in 1,2,3 print 1 not in 1,2,3 print 4 in print 4 not in 1,2,3 print x not in dlkjfxfei 可迭代物件 iterable 可以被next 函式呼叫並不斷返回下乙個值 知道沒有資料時丟擲s...
Python 迭代器與生成器
一 迭代器 理解迭代器需要搞清楚容器 container 迭代器協議 可迭代物件 iterable 迭代器 iterator 生成器 generator 1 容器 container 容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代獲取,可以用in,not in關鍵字判斷元素是否...