Python强化训练笔记(七)——使用deque队列以及将对象保存为文件
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]