学习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.