python--內建常用模組(一)
阿新 • • 發佈:2018-12-26
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時間模組
時間模組是我們日常使用中經常用到的模組.