簡單的生成器實現:
1#生成器,將for迴圈的變數傳遞到前面的式子進行處理2#
生成的並不是乙個列表,而是乙個存在算數規則的物件3#
不能通過下標直接取值,必須乙個乙個從頭到尾取
4 va=(i*2 for i in range(10))
5print
(va)67
#呼叫下乙個,只記住當前位置,相當於有乙個游標,只能向下
8print(va.__next__()) #
輸出:0
9print(va.__next__()) #
輸出:2
1011
#變數生成器
12for i in
va:13
print(i) #
輸出:#4 6 8 10 12 14 16 18
生成器高階:
1deffunx1(max):
2 m,x,y=0,0,1
3while mprint(y) #1 1 2 3 5 8 13 21 34 55
5yield y #
生成器輸出,使用for迴圈或者next方法才會輸出
6 x,y=y,(x+y)
7 m+=189
#普通呼叫10#
funx1(10)
1112
#生成器呼叫
13 funx=funx1(10)
14print(funx.__next__
())15
print("
----- 可輸出 ------")
16print("
取值方法1:
",funx.__next__
())17
print("
取值方法2:
",next(funx))
生成器傳送資料:
1deffunx1():
2while true: #
如果不寫則啟動就結束了,不能繼續發資料
3 res=yield
4print("
獲取的結果:
",res)56
#生成器呼叫
7 funx=funx1()
8 funx.send(none) #
必須先啟動生成器,無輸出,也可以使用funx.__next__()
9 funx.send("
------
") #
傳送資料,輸出:獲取的結果: ------
10 funx.send("
******
") #
輸出:獲取的結果: ******
表示乙個資料流,可以無限大
可使用for迴圈的物件都是可迭代物件,如字串、列表、字典等,可使用next(物件)的物件都是迭代器物件
可迭代物件可以通過iter方法變成迭代器物件
1 strx="abcdefghigk"2
3#轉換為迭代器
4 va=iter(strx)56
print(next(va)) #
輸出:a
7print(next(va)) #
輸出:b
可自定義先入先出還是後人先出,資料一經取出就在佇列裡自動去除
1import
queue23
#先進先出4#
qlistx=queue.queue(maxsize=5) #生成例項,引數maxsize表示最大數量,超過則阻塞,等待頭取出5#
qlistx=queue.queue() #生成例項67
#後進先出
8 qlistx=queue.lifoqueue() #
生成例項910
11#設定資料方法一12#
佇列滿則阻塞等待
13 qlistx.put("
1111111")
14 qlistx.put("
2222222")
1516
#設定資料方法二17#
超時則報異常
18 qlistx.put("
333333
",timeout=1)
1920
print(qlistx.qsize()) #
輸出列表大小
2122
#取資料方法一23#
如果取到最後沒有資料,將會一直處於阻塞
24print
(qlistx.get())
25print
(qlistx.get())
2627
#取值方法二28#
設定超時時間,超時則報異常
29print(qlistx.get(timeout=1))
303132#
取資料方法三33#
無資料不進行阻塞,如果無資料則報異常34#
print(qlistx.get_nowait())
優先順序訪問值:
值越小則優先順序越高,實現高優先順序最先取出
importqueue
qlistx=queue.priorityqueue() #
生成例項
qlistx.put((1,"
1111111"))
qlistx.put((-1,"
2222222"))
qlistx.put((100,"
99999999"))
print(qlistx.get()) #
輸出:(-1, '2222222')
print(qlistx.get()) #
輸出:(1, '1111111')
Python 迭代器 生成器
可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...
python 迭代器,生成器
什麼事迭代 可直接用作與for迴圈的物件統稱為可迭代物件 可以被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器,所有的iterable均可以通過內建函式iter 來轉變為iterator。對於迭代器來講,有乙個next 就夠了。在你使用for和in語句時,程式就會自動呼叫即將被處理的物件的可...
python 迭代器 生成器
知識背景 1 呼叫乙個普通的python函式時,一般是從函式的第一行 開始執行,結束於return語句 異常或者函式結束 可以看作隱式的返回none 2 一旦函式將控制權交還給呼叫者,就意味著全部結束。函式中做的所有工作以及儲存在區域性變數中的資料都將丟失 3 再次呼叫這個函式時,一切都將從頭建立。...