1 #!/usr/bin/python 2 def power(values): 3 for value in values: 4 print "powing %s" % value 5 yield value 6 def add(values): 7 for value in values: 8 if value % 2 == 0: 9 yield value + 3 10 else: 11 yield value + 2 12 elements = [1, 4, 7, 9, 12, 19] 13 add(power(elements)) 14 for i in add(power(elements)): 15 print(i)
首先來看上面一段代碼運行結果:
powing 1
3
powing 4
7
powing 7
9
powing 9
11
powing 12
15
powing 19
21
power這時已經不再是一個函數了,它是一個生成器,注意power在調用過程中並沒有執行print,但是在用for進行遍歷時它執行了print,所以你首先要清楚這是生成器和函數的區別!!很多教程連最基本的函數和生成器的區別都沒有講到!!接下來才說生成器和迭代器的區別:
1、語法方面來講:
生成器是用函數中yield語句來創建的。迭代器的創建首先跟函數無關,可以用iter([1,2])來創建。
2、使用方面來講:
由於生成器是使用函數的方式創建的,所以生成器里面的所有過程都會被執行,但請注意生成器里面的過程只有在被next()調用或者for循環調用時,里面的過程才會被執行,如同上面的例子只是單純調用add這個對象時,add里面的過程沒有被執行哦
迭代器同樣可以被for和next調用但是由於沒有其他過程,在被調用時只會返回值,不會有其他動作