學習yield之前,瞭解了迭代器, 生成器的概念。 沒有太多的細化。
迭代器對象: 支持iter和next()方法, 其中iter()方法返回迭代對象本身; next()方法返回容器的下一個元素, 在結尾時印發StopIteration異常。
生成器是迭代器,但是隻能遍歷一次。
yield返回的就是生成器。
看實例, 銀行生成器。
# -*- coding: utf-8 -*-
"""
Created on Fri Dec 18 13:30:07 2015
@author: weeds
"""
class Bank():
crisis = False
def create_atm(self):
while not self.crisis:
yield "$100"
hsbc = Bank()
corner_street_atm = hsbc.create_atm()
print corner_street_atm.next()
print corner_street_atm.next()
print [corner_street_atm.next() for cash in range(5)]
hsbc.crisis = True
#print corner_street_atm.next()
wall_street_atm = hsbc.create_atm()
#print wall_street_atm.next()
hsbc.crisis = False
print wall_street_atm.next()
print corner_street_atm.next()
print corner_street_atm.next()
最近看過一篇Python性能優化的軟件, 多用yield.