collections模塊中的deque對象是一個隊列,它有著正常隊列的先進先出原則。我們可以利用這個對象來實現數據的保存功能。 例如,現有一個猜數字大小的游戲,系統開始會隨機roll點一個0~100的整數,然後鍵盤開始接收你的輸入,每次輸入的數字系統會告訴你比這個隨機數大還是小,直到你猜對了程式才 ...
collections模塊中的deque對象是一個隊列,它有著正常隊列的先進先出原則。我們可以利用這個對象來實現數據的保存功能。
例如,現有一個猜數字大小的游戲,系統開始會隨機roll點一個0~100的整數,然後鍵盤開始接收你的輸入,每次輸入的數字系統會告訴你比這個隨機數大還是小,直到你猜對了程式才會結束。如下圖這樣:
代碼見:
from collections import deque from random import randint N = randint(0, 100) history = deque([], 5) def guess(k): if k == N: print "right" return True if k < N: print "%s is less-than N" % k if k > N: print "%s is greater-than N" % k return False while True: line = raw_input("please input a number:") if line.isdigit(): k = int(line) history.append(k) if guess(k): break elif line == "history" or line == "h?": print list(history)
在這裡我們使用了這個deque對象,它記錄下了我們上次的輸入歷史,便於我們記憶從而避免重覆猜測。
deque([], 5)
deque這裡接受兩個參數,第一個為隊列的初值,第二個指定存儲空間。這裡指定長度為5,超出5個長度後,第一個數出去,最新的數進入。
>>> d = deque([], 5) >>> d.append(1) >>> d.append(2) >>> d.append(3) >>> d.append(4) >>> d.append(5) >>> d deque([1, 2, 3, 4, 5], maxlen=5) >>> d.append(6) >>> d deque([2, 3, 4, 5, 6], maxlen=5)
保存對象
對於上面的隊列d,我們希望保存下來,下次程式重啟還可以使用,可以使用pickle模塊。
保存
>>> import pickle
>>> s = [1, 2, 3, 4, 5] >>> pickle.dump(s, open('object', 'w')) >>> # 這樣就將s對象存在了object這個文件中,並且這個文件有一個寫許可權
導入
>>> import pickle >>> s = pickle.load('object') >>> s [1, 2, 3, 4, 5]