一.random模塊 隨機 random() 隨機小數 uninform(a,b) 隨機小數 randint(a,b) 隨機整數 choice() 隨機選擇一個 sample() 隨機選擇多個 shuffle() 打亂 二.Counter 計數 三.字典 1.預設值字典 2.有序字典 四.棧和隊列 ...
一.random模塊 隨機
random() 隨機小數
uninform(a,b) 隨機小數
randint(a,b) 隨機整數
choice() 隨機選擇一個
sample() 隨機選擇多個
shuffle() 打亂
1 import random 2 from random import randint 3 4 print(randint(10, 20)) 5 # print(random.randint(10, 20))/ 6 print(random.random()) 7 print(random.uniform(10, 20)) # 10-20的隨機小數 8 9 lst = ['寶寶', '寶浪', '寶強', '包拯'] 10 random.shuffle(lst) # 隨機打亂順序 11 print(lst) 12 13 14 # 從列表中隨機選擇一個 15 print(random.choice(["林志玲", "劉一菲", "王昭君", "艾米", "寶寶"])) 16 print(random.sample(["林志玲", "劉一菲", "王昭君", "艾米", "寶寶"],3)) # 可以給隨機選取幾個
二.Counter 計數
1 from collections import Counter 2 3 print(Counter('寶寶今年特別喜歡王寶強')) # 計數 4 5 lst = ['jay', 'jay', 'jay', '寶寶', '寶寶', '胡辣湯', '上官婉兒'] 6 c = Counter(lst) 7 print(c.get('寶寶'))
三.字典
1.預設值字典
1 from collections import defaultdict 2 3 dd = defaultdict(lambda: '胡辣湯') # callable 可調用的, 字典是空的 4 5 print(dd['張無忌']) # 從字典向外拿數據. 字典是空的. key:callable() 6 print(dd['寶寶']) # 這裡的[] 和get() 不是一回事兒 7 print(dd)
2.有序字典
1 from collections import OrderedDict 2 3 dic = OrderedDict() # 有序字典 4 dic['a'] = '哈哈' 5 dic['b'] = '呵呵' 6 print(dic) 7 print(dic.get('a')) 8 print(dic.values()) 9 print(dic['a'])
四.棧和隊列
1.棧
特點:先進後出
1 class StackFullException(Exception): 2 pass 3 4 class StackEmptyException(Exception): 5 pass 6 class Stack: 7 8 def __init__(self,size): 9 self.size = size 給定存放數據的長度 10 self.lst = [] # 存放數據的列表 11 self.top = 0 # 棧頂指針 12 13 # 入棧 14 def push(self, el): 15 if self.top >= self.size: 16 raise StackFullException('your stack is full!!') 17 self.lst.insert(self.top, el) # 放元素 18 self.top += 1 # 棧頂指針向上移動一下 19 20 21 # 出棧 22 23 def pop(self): 24 if self.top == 0: 25 raise StackEmptyException('your stack is empty!!!') 26 self.top -= 1 27 el = self.lst[self.top] 28 return el 29 30 s = Stack(6) 31 s.push('寶寶') 32 s.push('我還') 33 s.push('記得') 34 35 print(s.pop()) 36 print(s.pop()) 37 print(s.pop())
2.單項隊列
特點:先進先出
1 import queue 2 q = queue.Queue() 3 q.put('李嘉誠1') 4 q.put('李嘉誠2') 5 q.put('李嘉誠3') 6 q.put('李嘉誠4') 7 q.put('李嘉誠5') 8 9 print(q.get()) 10 print(q.get()) 11 print(q.get()) 12 print(q.get()) 13 print(q.get())
3.雙向隊列
特點:和單項一樣
1 from collections import deque 2 3 d =deque() # 創建雙向隊列 4 d.append('寶寶') # 在右側添加 5 d.append('no') 6 d.append('way') 7 d.append('哈哈') 8 d.appendleft('娃哈哈') # 在左邊添加 9 d.appendleft('爽歪歪') 10 d.appendleft('優酸乳') 11 12 print(d.pop()) # 從右邊拿數據 13 print(d.pop()) # 從右邊拿數據 14 print(d.pop()) # 從右邊拿數據 15 print(d.pop()) # 從右邊拿數據 16 print(d.popleft()) # 從左邊拿數據 17 print(d.popleft()) # 從左邊拿數據 18 print(d.popleft()) # 從左邊拿數據
五.time模塊
1 # 時間戳: 從1970-01-01 00:00:00 開始計算. 未來存儲的時候用時間戳 2 print(time.time())
1 # 格式化時間 2 print(time.strftime('%Y-%m-%d %H:%M:%S')) # 用來顯示的
1 # 結構化時間(python的時間) 2 t = time.localtime() 3 print(t.tm_year) 4 print(t.tm_mon) 5 print(t.tm_mday)
1 # 資料庫里存儲一個數字. 把它還原成我們的格式化時間 2 a = 847772281.0 3 # 先把這個時間戳轉換成python中的結構化時間 4 t = time.localtime(a) # 結構化時間括弧里填的是秒 time.localtime(秒) # 本地化的東八區的時間 5 # t = time.gmtime(a) # 格林尼治時間 6 7 s = time.strftime('%Y-%m-%d %H:%M:%S', t) # time.strftime(格式化格式, 傳入結構化轉化完的時間 t) 8 print(s)
# 讓用戶輸入一個時間. 然後把時間轉化成時間戳 strt = input('請輸入一個時間:') # 把字元串轉化成結構化時間 t = time.strptime(strt, '%Y-%m-%d %H:%M:%S') # 轉化成時間戳 print(time.mktime(t)) # 847772281.0 # 本地化的東八區的時間
六.functools
1.wraps
from functools import wraps # 可以改變一個函數的名字, 註釋.... def wrapper(fn): @wraps(fn) # 把inner的名字改變成原來的func def inner(*args, **kwargs): print('前') ret = fn(*args,**kwargs) print('後') return ret return inner @wrapper # func = wrapper(func) def func(): print('哈哈哈') print(func.__name__) # func
2.reduce
1 def func(a, b): 2 return a + b # 0 + 1 3 4 # 會把我們每一個數據交給func去執行, 把預設值作為第一個參數傳遞給函數 5 6 ret = reduce(func, [1, 4, 7, 8, 6, 9],0) 7 print(ret) 8 print(reduce(lambda x, y: x+y, [i for i in range(101)]))
3.partial
1 from functools import partial 2 3 def chi(zhushi, fushi): 4 print(zhushi, fushi) 5 6 chi2 = partial(chi, fushi = "辣雞爪") 7 chi2('大米飯') 8 chi2('小米飯') 9 chi2('黑米飯')
七.命名元組 namedtuple
1 p = namedtuple('Point', ["x", "y"]) 2 3 p1 = p(10, 20) 4 print(p1) 5 print(p1.x) 6 print(p1.y)
八.OS模塊 系統操作
1.os
# 必須要記住. 很常用 os.makedirs('baby/安哥拉/特斯拉') # 可以一次性創建多級目錄 os.mkdir('baby/安哥拉/特斯拉/bb') # 上層文件夾必須存在 os.removedirs('baby/安哥拉/特斯拉/bb') # 目錄不是空, 不能刪除 #可以幫我們刪除當前這個目錄級中的所有空文件夾 # 可以記住 一般不刪數據 os.rmdir('baby/安哥拉/特斯拉') # 指定文件夾刪除 os.system('dir') print(os.popen('dir').read()) # 執行shell腳本或者cmd命令 print(os.getcwd()) # 當前程式運行的文件夾 D:\python_workspace_s18\day 23 內置模塊02 os.chdir('baby')
1 # os.path 和路徑相關的內容 2 print(os.path.abspath('baby')) # 把相對路徑改成絕對路徑 3 print(os.path.split(r'D:\python_workspace\內置模塊\baby\1.txt')) # 切割文件和文件路徑 4 5 print(os.path.dirname(r'D:\python_workspace\內置模塊\baby\1.txt')) 6 # 文件路徑 7 print(os.path.basename(r'D:\python_workspace\內置模塊\baby\1.txt')) 8 # 文件 9 10 print(os.path.existsr'D:\python_workspace\內置模塊\baby\1.txt')) 11 # 判斷文件是否存在 12 print(os.path.abspath('1.txt'))
2.sys模塊
1 import sys 2 3 print(sys.path) # 找到模塊的. 必須要記住. 模塊的搜索路徑 4 sys.path.append(r'D:\python_workspace\內置常用模塊') 5 print(sys.path)
九.自定義模塊和包
import
from xxx import xxxx
一個表達式 -> 一條語句 -> 語句塊 -> 函數 -> 類 -> 模塊 -> 包 -> 項目
包就是我們的文件夾, 包內可以寫很多個模塊.
查找路徑是:sys.path, 隨動. 跟著你的啟動文件所在的位置變化
不論使用絕對導入. 還是相對導入. 啟動文件一定在最外面
1.模塊
寫的一個py文件就可以稱作一個模塊
2.包
文件夾里裝很多模塊的就是包