一直也不会用yield, 今天学习学习。 python
def fab(max): n, a, b = 0, 0, 1 while n < max: yield b # print b a, b = b, a + b n = n + 1
当函数中有yield时, 此时函数就不是函数了,而是一个生成器,yield有点像return, 但不是跳出函数,而是返回一个迭代值。 函数
>>> for n in fab(5): ... print n
函数的用法是这样, 当循环的时候, 执行到yield,会返回一个值, 下一次循环的时候会从yield的下一条数据开始执行, 直到遇到yield,循环下去。 学习
>>> f = fab(5) >>> f.next() 1
固然也能够这样调用。 大数据
若是没有return,函数会执行至完毕,若是有return,则直接抛出 StopIteration 终止迭代。 spa
def read_file(fpath): BLOCK_SIZE = 1024 with open(fpath, 'rb') as f: while True: block = f.read(BLOCK_SIZE) if block: yield block else: return
读取大数据会有用。 code
返回时间段
it
import datetime def main(start, end): start_time = datetime.datetime.strptime(start, "%Y-%m-%d") end_time = datetime.datetime.strptime(end, "%Y-%m-%d") while start_time <= end_time: yield start_time start_time += datetime.timedelta(days=1) if __name__ == '__main__': for i in main('2013-02-01', '2013-02-28'): print i, type(i)