初識python迭代和生成器

2021-08-26 20:44:49 字數 2721 閱讀 6815

接觸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的...