1.模块的简单认识
模块就是我们把装有特定功能的代码进行归类的结果.从代码编写的单位来看我们的程序,从小到大的顺序:一条代码 < 语句块 < 代码块(函数,类) < 模块,我们目前写的所有的py文件都是模块,引入模块的方式:
1.import模块
2.from xxx import 模块
2.collections模块
coleections模块主要封装了一些关于集合类的相关操作.比如,terable,Iterator等等.除了这些意外,collections还提供了一些除了基本数据类型以外的数据集合类型.Counter,deque,OrderDict,defaultdict以及namedtuple
1.Counter
counter是一个计数器,主要用来计数
from collections import Counter print(Counter("哈哈哈你还好啊")) # 计数 Counter({'哈': 3, '你': 1, '还': 1, '好': 1, '啊': 1}) lst = ["jay","jay","jay","哈哈","你好"] dic = {"a":"你好","b":"你好","c":"真的好"} l = Counter(lst) c = Counter(dic.values()) print(l) # Counter({'jay': 3, '哈哈': 1, '你好': 1}) print(c) # Counter({'你好': 2, '真的好': 1})
二. deque 双向队列
1.先介绍两种数据结构 1.栈 2.队列
1.栈: FILO. 先进后出
2.队列:FIFO.先进先出
python中并没有给出Stack模块,所以我们写一个大概意思(这个版本有非常严重的并发问题,仅供粗略观看)
栈:
class StackFullException(Exception): pass class StackEmptyExcepiton(Exception): pass class Stack: def __init__(self,size): self.size = size self.lst = [] self.top = 0 # 栈顶指针 def push(self,el): # 入栈 if self.top >= self.size: raise StackFullException("栈已放满") self.lst.insert(self.top,el) self.top +=1 def pop(self): #出栈 if self.top == 0: raise StackEmptyExcepiton("栈已放空") self.top -= 1 el = self.lst[self.top] return el s = Stack(6) s.push("1") s.push("2") s.push("3") s.push("4") s.push("5") s.push("6") print(s.pop()) #6 print(s.pop()) #5 print(s.pop()) #4 print(s.pop()) #3 print(s.pop()) #2 print(s.pop()) #1
2.deque: 双向队列
from collections import deque d = deque() # 创建双向队列 d.append("1") # 在右侧添加 d.append("2") d.append("3") # deque(['1', '2', '3']) d.appendleft("0") # 在左侧添加 deque(['0', '1', '2', '3']) print(d.pop()) # 从右边拿数据 3 print(d.popleft()) # 从左边拿数据 0
3.namedtuple 命名元组
给元组内的元素进行命名吗.这是一个元组(x,y).同时,我们还可以认为这是一个点坐标.这时,我妈们可以使用namedtuple对元素进行命名
from collections import namedtuple nt = namedtuple("point",["x","y"]) p = nt(1,2) print(p) # point(x=1, y=2) print(p.x) # 1 print(p.y) # 2
4. orderdict 有序字典 , defaultdict默认值字典
字典的key是默认无序的在python3.3以前体现的很明显,时常打印出的字典顺序混乱,orderdict是有序的
from collections import OrderedDict dic = OrderedDict() dic["a"] = "你好" dic["b"] = "哈哈" print(dic) # OrderedDict([('a', '你好'), ('b', '哈哈')]) print(dic.get("a")) # 你好 print(dic.values()) # odict_values(['你好', '哈哈']) print(dic["a"]) # 你好
defaultdict: 可以给字典设置默认值.当key不存在时.直接获取默认值:
from collections import defaultdict dd = defaultdict(list) print(dd["哇哈哈"]) # [] print(dd) # defaultdict(<class 'list'>, {'哇哈哈': []}) dd2 = defaultdict(lambda : 0) # callable 可调用的,字典是空的 print(dd2["优乐美"]) # 0 print(dd2) # defaultdict(<function <lambda> at 0x000001ECF0571E18>, {'优乐美': 0})
三. time时间模块
时间模块是我们日常使用中经常用到的模块.