Python入門(七)生成器 迭代器

2021-10-05 11:49:59 字數 2033 閱讀 3768

列表成器示例

// an highlighted block

1.列表生成式 a =

[x*2

for x in

range(10

)] 生成一到九分別乘以2的這個列表

#[0,

2,4,

6,8,

10,12,

14,16,

18]def f

(n):

return n**

3 a =[f

(x)for x in

range(10

)] #018

27...列表生成器裡可以放入函式。

建立生成器物件

// an highlighted block

2.()建立 生成器

s =(x*2

for x in

range

(100))

print

(s) 這是乙個生成器物件,需要乙個時候就next拿出來乙個。

print

(next

(s))

生成器 就是乙個可迭代物件

yield 建立生成器 (重要)

// an highlighted block

def foo()

:print

('ok'

) count =

yield

1print

(count)

print

('ok2'

)yield

2 g =

foo(

) ok 1 ok 2

a =next

(g) #乙個yield 就是迭代一次 兩個就迭代兩次,繼續next

() print

(a) 每次next乙個值,則會返回乙個值,這裡我們用變數去接收並分別列印。

b =next

(g) 情況2.用send進行yield

b.send

(none) send 就是為 yield前的變數傳值,但是第一次send前如果沒有next,

只能傳乙個send

(none) ,因為此時要進入執行,並不知道傳給誰

ret = b.

send

("eee"

) 此時繼續從上次yield 地方繼續開始,而這個時候count =

"eee"

,並繼續往下執行。

如果還不明白的話,建議拷貝**執行下研究下就好拉。

生成器都是迭代器,迭代器不一定是生成器。

list,tuple,dict,string: 都是可迭代物件iterable()

迭代器 都要有iter方法,和next 方法。

for迴圈內部三件事

1.呼叫可迭代物件的iter 方法,返回乙個迭代器物件

2.不斷呼叫迭代器物件的next()方法

3.處理stopiteration

isinstance 括號裡前面物件,後面是要確認的物件。 該函式是判斷。。。是否是什麼

print (isinstance([1,2],list))

l = [1,2,3,5]

print(isinstance(l,iterable)) 檢視是不是迭代物件。

// an highlighted block

def fib

(max)

:# n, before, after =0,

0,1# while n < max:

## yield before

# before, after = after, before + after

# n = n +1#

## fib(10

)

Python(五)生成器 迭代器

一 生成器 求平方 傳統方法 浪費時間 square table for i in range 10000 for i in range 10 print square table i 生成器 到使用的時候才做真正的計算,節省時間和空間 square generator x x for x in r...

003 生成器 迭代器

現在有個需求,列表 1,2,3,4,5,6,7,8,9 將列表裡的每個值加1。a 1,2,3,4,5,6,7,8,9 b for item in a a b print a a 1,2,3,4,5,6,7,8,9 for index,ele in enumerate a,0 a index 1 pr...

python 入門8 迭代器 生成器

迭代器 迭代器從表面上看是乙個數,當時用其中的資料時,每次從資料流中取乙個資料。直到資料被取完,而且資料不會被重複使用。從 迭代器是實現了迭代器協議方法的物件或類。迭代器協議方法主要是兩個 自定義迭代器 要定義乙個迭代器,只要定義乙個實現迭代器協議方法的類即可。例子 class myiterator...