PHP設計模式|觀察者模式(Observer)解析與應用
阿新 • • 發佈:2020-08-18
在python社群,普遍認為生成器的本質就是迭代器。唯一的區別:生成器是自己用python程式碼構建的資料結構;而迭代器都是通過提供、轉化得到的
獲取生成器的三種方式:1.生成器函式 2. 生成器表示式 3.python內部提供
1.生成器函式
def func(): print(111) print(222) yield 3 yield 4 ret = func() # 返回一個生成器物件 print(ret) print(next(ret)) # 通過next(生成器物件)從上到下依次取yiled對應的值,一個next對應一個yield print(next(ret)) #yield不會使整個函式結束
def gen_func(): for i in range(1, 5001): yield f'{i}號包子' ret = gen_func() for i in range(200): print(next(ret)) for i in range(200): # next()在整個程式結束前會記住其當前的位置 print(next(ret))
# yield from 優化內層迴圈,提高效率 def func1(): l1 = [1, 2, 3, 4, 5] yield from l1 # 將l1這個列表變成了迭代器返回其中的每一個元素""" yield from l1 的等價如下 yield 1 yield 2 yield 3 yield 4 yield 5 """
ret = func1()
print(next(ret))
print(next(ret))
def func2(): l1 = ['衛龍', '老冰棍', '北冰洋', '牛羊配'] l2 = ['饅頭', '花捲', '豆包', '大餅'] yield from l1 yield from l2 g = func2() # 生成器物件 """ for i in range(8): print(next(g))""" for i in g: print(i)
2. 生成器表示式
obj = (i for i in range(1, 11)) # 生成器表示式 for i in obj: print(i)