1. 程式人生 > 實用技巧 >PHP設計模式|觀察者模式(Observer)解析與應用

PHP設計模式|觀察者模式(Observer)解析與應用

在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)