py 迭代生成器

xiangzilong發表於2020-11-18
'''
生成器: generator
1,通過列表推導式
g = (x+1 for x in range(4))
2,函式+yield
def func():
    ...
    yield
g = func()
產生元素
1,next(g)
2,g.__next__()

'''
from typing import Iterable

g = (x *3 for x in range(20))
print(type(g))  #<class 'generator'>

#方式1呼叫生成器
print(g.__next__())
print(g.__next__())

#方式2 系統自帶的方法 next()
print(next(g))
while True:
    try:
        e=next(g)
        print(e)
    except:
        print('沒有更多的元素了')
        break

#定義生成器的方式2 ,藉助函式完成
'''
步驟:
1,定義一個函式,函式中使用yield 關鍵字
2,呼叫函式,接收呼叫的結果
3,得到的結果就是生成器
4,藉助next() 或者(__next__)
'''
def func():
    n= 0
    while True:
        n+=1
        yield n
e = func()
print(e)  #<generator object func at 0x000001FA4CE3BB88>


#生成器,應用協程
def task1(n):
    for i in range(n):
        print(f'正在搬第{i}塊磚')
        yield None

def task2(n):
    for i in range(n):
        print(f'正在聽第{i}首歌')
        yield None
g1 = task1(5)
g2 = task2(5)
while True:
    try:
        next(g1)
        next(g2)
    except:
        break

'''
可以被next() 函式呼叫並不斷返回下一個值的物件稱為迭代器,Iterastor,只能前進不能後退
'''
#可迭代物件:1,生成器 2,元組,列表,集合,字典,字串
#判斷一個物件是否可以迭代?
list1 = [1,1,1,1,1,1]
f = isinstance(list1,Iterable)
print(f)

相關文章