1. 程式人生 > >python--內建常用模組(一)

python--內建常用模組(一)

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時間模組

時間模組是我們日常使用中經常用到的模組.