生成器函式應用
阿新 • • 發佈:2018-12-02
在for迴圈中碰到yield會暫停本次迴圈,直到執行下一次__next__()才繼續往下執行程式碼。
def test(): for i in range(5): print('第%s次執行' % i) yield i print('開始新的迴圈') g = test() g.__next__() # 第0次執行 g.__next__() # 開始新的迴圈 # 第1次執行 g.__next__() # 開始新的迴圈 # 第2次執行 g.__next__() # 開始新的迴圈 # 第3次執行 next(g) # 開始新的迴圈 # 第4次執行 g.__next__() # 開始新的迴圈
實現嘀嗒函式
def tick():
while 1:
yield '嘀'
yield '嗒'
g = tick()
print(g.__next__())
# 嘀
print(g.__next__())
# 嗒
print(g.__next__())
# 嘀
print(g.__next__())
# 嗒
統計班級人數佔年紀人數百分比
eval可以將字串轉換成對應的資料型別
使用with開啟檔案不需要手動執行close
data.text:
{'class': 1, 'students': 30} {'class': 2, 'students': 35} {'class': 3, 'students': 28} {'class': 4, 'students': 32}
def get_total(): with open('data', 'r', encoding='utf-8') as f: for i in f: yield eval(i)['students'] g = get_total() c1 = g.__next__() c2 = g.__next__() c3 = g.__next__() c4 = g.__next__() total = c1 + c2 + c3 +c4 print(c1 / total, c2 / total, c3 / total, c4 / total) # 0.24 0.28 0.224 0.256