1. 程式人生 > >10-4 生成器

10-4 生成器

object iter odi 過濾 net *** 進行 簡單 return

生成器

  即自己寫的函數

簡單的生成器函數

  只要包括__next__()函數和_iter__()的就是生成器

def genetator():
    print(1)
    return ‘a‘
ret = genetator()
print(ret)

結果:
1
a
只要含有yeild關鍵字的函數都是生成器函數,且與return不能共用,且需要寫在函數內部
def genetator():
    print(1)
    yield ‘a‘
# 生成器函數:執行之後會得到一個生成作為返回值
ret = genetator()
print(ret)#結果:<generator object genetator at 0x0225DCC0>
print(ret.__next__())
# 結果:
# 1
# a
ret.__iter__()

def wahaha():
    for i in range(20):
        yield ‘娃哈哈%s‘%i
g=wahaha()
#只拿前五個,用count計數
count = 0
for k in g:
    count += 1
    print(k)
    if count > 5:
        break

#隨時可以再拿下一個值
print(‘ooooo‘,g.__next__())
每生成一個生成器,都互不相關,各個執行

 

監聽文件輸入的例子(生成器)

# 監聽文件的輸入
def tail(filename):
    f = open(filename,encoding=‘utf-8‘)
    while True:
        line = f.readline()
        if line.strip():
            print(‘***‘,line.strip())
tail(‘info‘)
#監聽文件的輸入,並對內容進行過濾
def tail(filename):
    f = open(filename,encoding=‘utf-8‘)
    while True:
        line = f.readline()
        if line.strip():
            yield line.strip()
g = tail(‘info‘)
for i in g:
    if ‘python‘ in i:
        print(‘******‘,i,‘~~~~‘)
    if ‘www‘ in i:
        print(‘******‘,i,‘!!!!‘)

  

10-4 生成器