接觸python迭代器,生成器後,查閱資料整理了一些知識點,寫了一些自己的感悟,如有錯誤希望及時指正。
list = [1, 2, 3]
for i in mylist:
print(i)
#result:12
3from collections import iterable
print(isinstance([1, 2, 3], iterable)) #true
print(isinstance({}, iterable)) #true
print(isinstance(123, iterable)) #false
print(isinstance('abc', iterable)) #true
from collections import iterator
print(isinstance([1, 2, 3], iterator)) #false
print(isinstance({}, iterator)) #false
print(isinstance(123, iterator)) #false
print(isinstance('abc', iterator)) #false
可以看出list、dict和str都是可迭代的。但是他們並不是迭代器。
g_generator = (x * x for x in range(10))
print(type(g_generator)) #print(isinstance(g_generator, iterable)) #true
print(isinstance(g_generator, iterator)) #true
for i in g_generator:
print(i)
#0#1
#4#9
#16#25
#36#49
#64#81
在生成器中存在著next()和iter()方法,通過help(g_generator)來檢視:
= class generator(object)
| methods defined here:
| | __del__(...)
| | __getattribute__(self, name, /)
| return getattr(self, name).
| | __iter__(self, /)
| implement iter(self).
| | __next__(self, /)
| implement next(self).
| | __repr__(self, /)
| return repr(self).
| | close(...)
| close() -> raise generatorexit inside generator.
| | send(...)
| send(arg) -> send 'arg' into generator,
| return next yielded value or raise stopiteration.
| | throw(...)
| throw(typ[,val[,tb]]) -> raise exception in generator,
| return next yielded value or raise stopiteration.
|
通過for in 迴圈和generator的next()方法,可以很容易的取想要得數,雖然上面g_generator有10個數,但是通過next()列印需要的5個數,後面的5個就沒有被計算,極大的節省了記憶體。
for i in range(5):
print(next(g_generator))
#0#1
#4#9
#16
迭代是乙個實現可迭代物件(實現 __iter__() 方法)和迭代器(實現 __next__() 方法)的過程。可迭代物件是你可以從其獲取到乙個迭代器的任一物件。迭代器是那些允許你迭代可迭代物件的物件。
def fib(x):
n, a, b = 0, 0, 1
while n < x:
yield b
a, b = b, a + b
n += 1
f = fib(6)
print(f) #print(type(f)) #print(isinstance(f, iterable)) #true
print(isinstance(f, iterator)) #true
for i in f:
print(i)
#1 #1
#2 #3
#5 #8
ff = fib(6)
print(ff.__next__()) #1
print(ff.__next__()) #1
print(ff.__next__()) #2
參考內容: python初識生成器 迭代器
生成器 帶有 yield 的函式在 python 中被稱之為 generator 生成器 def xragns 定義函式生成器 print 小伙 yield 好 加上yield就會生成乙個生成器 print python yield hao print 程式設計 yield hao x xragns...
迭代和生成器
列表迭代的本質 iter 函式返回乙個迭代器,然後可以呼叫迭代器上的next方法 arr 1,2,3,4,5 arr iterator arr.iter print arr iterator.next print next arr iterator 乙個典型的迭代器實現。例子來自 流暢的python...
Python迭代器和生成器
先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...