列表成器示例
// 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...