隊列
先進先出(LIFO: First In First Out)
# -.- coding:utf-8 -.-
from __future__ import print_function
def checker(func):
def wrapper(self, *args, **kwargs):
if self.empty():
return self.items
return func(self, *args, **kwargs)
return wrapper
class Queue(object):
"""隊列: 有序, 先進先出"""
def __init__(self):
self.items = []
def size(self):
"""獲取隊列元素總數(shù)."""
return len(self.items)
def empty(self):
"""隊列為空則返回: True ; 隊列非空返回: False"""
return not self.size()
def append(self, item):
"""在隊列的最末端增加一個元素."""
self.items.append(item)
return self.items
@checker
def peek(self):
"""在隊列的最左處獲取一個元素, 不做移除動作."""
return self.items[0]
@checker
def get(self):
"""在隊列的最左處獲取一個元素, 并移除該元素."""
return self.items.pop(0)
def __iter__(self):
"""讓隊列支持迭代"""
return self
def __next__(self):
"""Python3: 讓隊列支持for循環(huán)"""
if not self.empty():
return self.get()
raise StopIteration
def next(self):
"""Python2: 讓隊列支持for循環(huán)"""
return self.__next__()
def __str__(self):
"""讓隊列支持print打印結(jié)果"""
return "{}".format(self.items)
if __name__ == '__main__':
# 創(chuàng)建一個隊列對象.
queue = Queue()
# 為隊列對象增加幾個元素
queue.append('a')
queue.append('b')
queue.append('c')
queue.append('d')
queue.append('e')
# 查看隊列對象
print("查看隊列對象: ", queue)
# 獲取隊列對象的一個元素
print("獲取隊列對象的一個元素: ", queue.get())
# 查看隊列對象
print("查看隊列對象: ", queue)
# 遍歷隊列對象
for enum, i in enumerate(queue):
print("遍歷第{}個元素: ".format(enum), i)
# 輸出結(jié)果
# 查看隊列對象: ['a', 'b', 'c', 'd', 'e']
# 獲取隊列對象的一個元素: a
# 查看隊列對象: ['b', 'c', 'd', 'e']
# 遍歷第0個元素: b
# 遍歷第1個元素: c
# 遍歷第2個元素: d
# 遍歷第3個元素: e