Python強化訓練筆記(七)——使用deque隊列以及將對象儲存為檔案,
collections模組中的deque對象是一個隊列,它有著正常隊列的先進先出原則。我們可以利用這個對象來實現資料的儲存功能。
例如,現有一個猜數字大小的遊戲,系統開始會隨機roll點一個0~100的整數,然後鍵盤開始接收你的輸入,每次輸入的數字系統會告訴你比這個隨機數大還是小,直到你猜對了程式才會結束。如這樣:
代碼見:
from collections import dequefrom random import randintN = 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 Falsewhile 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)>>> ddeque([1, 2, 3, 4, 5], maxlen=5)>>> d.append(6)>>> ddeque([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]