Pyhon优雅的魔力使生成器函数很特殊,它们像定格相机一样工作。
当一个标准函数遇到return语句时,它会返回值,然后函数会丢弃内部的所有数据。当下次调用时,一切从头开始。
yield语句会做不同的事情。它像return一样返回一个值,但是它不会使函数丢弃数据,相反所有数据都被保存起来。
#/usr/bin/python3
2 #coding:utf-8
3
4 #生成器函数 yield
5 def odds(start = 1):
6 '''return all odd numbers from start updates'''
7 if int(start) % 2 == 0:
8 start = int(start) + 1
9 while True:
10 yield start
11 start += 2
12
13 if __name__ == "__main__":
14 lis = [m*m for m in range(1,13) if not m*m %2] #生成器表达式
15 print(lis)
16
17 for n in odds():
18 if n > 7:
19 break
20 else:
21 print(n)
22