python 内置模块
一.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.包
文件夹里装很多模块的就是包