Python檔案袋(生成器、迭代器、隊列 )

生成器:

簡單的生成器實現:spa

 1 #生成器,將for循環的變量傳遞到前面的式子進行處理
 2 #生成的並非一個列表,而是一個存在算數規則的對象
 3 #不能經過下標直接取值,必須一個一個從頭至尾取
 4 va=(i*2 for i in range(10))
 5 print(va)
 6 
 7 #調用下一個,只記住當前位置,至關於有一個遊標,只能向下
 8 print(va.__next__()) #輸出:0
 9 print(va.__next__()) #輸出:2
10 
11 #變量生成器
12 for i in va:
13     print(i) #輸出:#4 6 8 10 12 14 16 18

生成器進階:code

 1 def funx1(max):
 2     m,x,y=0,0,1
 3     while m<max:
 4         #print(y) #1 1 2 3 5 8 13 21 34 55
 5         yield y #生成器輸出,使用for循環或者next方法纔會輸出
 6         x,y=y,(x+y)
 7         m+=1
 8 
 9 #普通調用
10 #funx1(10)
11 
12 #生成器調用
13 funx=funx1(10)
14 print(funx.__next__())
15 print("----- 可輸出 ------")
16 print("取值方法1:",funx.__next__())
17 print("取值方法2:",next(funx))

生成器發送數據:對象

 1 def funx1():
 2     while True: #若是不寫則啓動就結束了,不能繼續發數據
 3         res=yield
 4         print("獲取的結果:",res)
 5 
 6 #生成器調用
 7 funx=funx1()
 8 funx.send(None) #必須先啓動生成器,無輸出,也能夠使用funx.__next__()
 9 funx.send("------") #發送數據,輸出:獲取的結果: ------
10 funx.send("******") #輸出:獲取的結果: ******

迭代器:

表示一個數據流,能夠無限大blog

可以使用for循環的對象都是可迭代對象,如字符串、列表、字典等,可以使用next(對象)的對象都是迭代器對象隊列

可迭代對象能夠經過iter方法變成迭代器對象字符串

1 strx="abcdefghigk"
2 
3 #轉換爲迭代器
4 va=iter(strx)
5 
6 print(next(va)) #輸出:a
7 print(next(va)) #輸出:b

 隊列:

可自定義先入先出仍是後人先出,數據一經取出就在隊列裏自動去除get

 1 import queue
 2 
 3 #先進先出
 4 #qlistx=queue.Queue(maxsize=5) #生成實例,參數maxsize表示最大數量,超過則阻塞,等待頭取出
 5 #qlistx=queue.Queue() #生成實例
 6 
 7 #後進先出
 8 qlistx=queue.LifoQueue() #生成實例
 9 
10 
11 #設置數據方法一
12 #隊列滿則阻塞等待
13 qlistx.put("1111111")
14 qlistx.put("2222222")
15 
16 #設置數據方法二
17 #超時則報異常
18 qlistx.put("333333",timeout=1)
19 
20 print(qlistx.qsize()) #輸出列表大小
21 
22 #取數據方法一
23 #若是取到最後沒有數據,將會一直處於阻塞
24 print(qlistx.get())
25 print(qlistx.get())
26 
27 #取值方法二
28 #設置超時時間,超時則報異常
29 print(qlistx.get(timeout=1))
30 
31 
32 #取數據方法三
33 #無數據不進行阻塞,若是無數據則報異常
34 #print(qlistx.get_nowait())

優先級存取值:it

值越小則優先級越高,實現高優先級最早取出io

import queue

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')
相關文章
相關標籤/搜索