關於python yield 和 迭代器 生成器的使用
python的迭代器 就是重複的做很多事情,可以使用for 迴圈 將裡面的元素迴圈遍歷出來。
迭代器的優點: 使用迭代器不要求事先準備好整個迭代過程中的所有元素,僅僅是在迭代的時候才會展示出來,
建立迭代器:
a = [1,2,3,4,5,6,7]
b = (1,2,3)
str = ‘hello world’
iter(a)
iter(b)
iter(str)
可以使用 iter() 函式來建立迭代器。
當定義好一個迭代器之後 就可以使用它的內建方法 next 方法
next方法: 獲取下一個迭代器的元素
isinstance() 判斷物件是否是一個迭代器物件
當迭代器 或者 生成器 最後丟擲了 StopIteration 表示 無法繼續返回下一個值 代表他裡面沒有東西了
列表生成器: generator
L = [ x * * for x in range(10)]
l = [ x * x for x in range(10)]
l
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
generator 的功能非常強大,如果推算的演算法比較複雜 我們可以使用函式來實現功能
比如 : 著名的斐波那契數量
1,1,2,3,5,8,13,21,…..
a b. a+b
先使用函式將他寫出來:
def fib(max):
n,a,b = 0,0,1
while n < max:
print(b)
a,b = b,a+b
n = n + 1
return ‘done
使用 yield 表示式
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return ‘done’
當一個函式中有了 yield關鍵字的時候 說明這個函式不是一個普通的哈數 而是一個 生成器
yieid 就代表了 生成器的意思
列表生成器:
list(range(1,11))
[1,2,3,4,5,6,7,8,9]