迭代器
迭代是 Python 最強大的功能之一,是訪問集合元素的一種方式。現在正式進入主題:
- 迭代器,迭代器是一個可以記住遍歷的位置的對象。
- 迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
- 迭代器有兩個基本的方法:iter() 和 next()。
- 實例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 1、字符創創建迭代器對象
str1 = 'liangdianshui'
iter1 = iter ( str1 )
# 2、list對象創建迭代器
list1 = [1,2,3,4]
iter2 = iter ( list1 )
# 3、tuple(元祖) 對象創建迭代器
tuple1 = ( 1,2,3,4 )
iter3 = iter ( tuple1 )
# for 循環遍歷迭代器對象
for x in iter1 :
print ( x , end = ' ' )
print('\n------------------------')
# next() 函數遍歷迭代器
while True :
try :
print ( next ( iter3 ) )
except StopIteration :
break
- 結果:
l i a n g d i a n s h u i
------------------------
1
2
生成器
在 Python 中,使用了 yield 的函數被稱爲生成器(generator)。
跟普通函數不同的是,生成器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。
在調用生成器運行的過程中,每次遇到 yield 時函數會暫停並保存當前所有的運行信息,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續運行。
調用一個生成器函數,返回的是一個迭代器對象。
- 實例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
s = (x * x for x in range(5))
print(s)
for x in s:
print(x)
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
f = fib(10)
print('fib(10):', f)
for x in f:
print(x)
# call generator manually:
g = fib(5)
while 1:
try:
x = next(g)
print('g:', x)
except StopIteration as e:
print('Generator return value:', e.value)
break