python中迭代器和生成器的區別


 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調用但是由於沒有其他過程,在被調用時只會返回值,不會有其他動作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM