十、模 块
1、模块介绍
1、概述:
目前代码比较多,写在一个文件中还体现不出来,但是随着代码量越来越多,代码就越来越难以维护。为了解决难以维护的问题,我们把很多相似功能的函数分组分别放到不同的文件中去,这样每个文件所包含的内容相对较少而且对于每一个文件的大致功能可以用文件名来体现,很多不错语言都是这样用的,一个.py文件就是一个模块。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。
如:os 是系统相关的模块;file是文件操作相关的模块
2、优点:
1、提高代码维护性
2、提高了代码的复用度,当一个模块完毕,可以被多个地方引用
3、引用其他的模块,内置模块和第三方模块和自定义模块
4、避免函数名和变量名的冲突
3、模块分为三种:自定义模块 内置模块 开源模块
# 模块 # 本质:.py文件实现一个功能 # 导入方法 import module_name module_name.method # 模块名.模块内的方法 # module_name = all_code 把要导入的模块文件内容全部解释 # 然后赋值给module_name import module1_name, module2_name.... # 导入多个模块 from module_name import * # 全部导入,不建议使用 # 把module_name文件内容放到此处,全部执行 from module_name import m1, m2, m3.... # 导入多个模块内的方法 # m1 = module_name print(m1) m2() # 使用时直接使用即可 """ import 本质:路径搜索和搜索路径 导入模块 本质:把python文件解释一遍 包:用来从逻辑上组织模块,本质就是一个目录(必须带有一个__init__.py文件) """ from module_name import method_name as method_name1 # 导入包 import package_name # 本质:执行、解释包内的__init__.py文件 # 导入不是同一个文件内的模块 import sys, os x = os.path.dirname(os.)
2、time & datetime模块
#_*_coding:utf-8_*_ __author__ = 'Alex Li' import time # print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了time.process_time()测量处理器运算时间,不包括sleep时间,不稳定,mac上测不出来 # print(time.altzone) #返回与utc时间的时间差,以秒计算 # print(time.asctime()) #返回时间格式"Fri Aug 19 11:14:16 2016", # print(time.localtime()) #返回本地时间 的struct time对象格式 # print(time.gmtime(time.time()-800000)) #返回utc时间的struc时间对象格式 # print(time.asctime(time.localtime())) #返回时间格式"Fri Aug 19 11:14:16 2016", #print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上 # 日期字符串 转成 时间戳 # string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #将 日期字符串 转成 struct时间对象格式 # print(string_2_struct) # # # struct_2_stamp = time.mktime(string_2_struct) #将struct时间对象转成时间戳 # print(struct_2_stamp) #将时间戳转为字符串格式 # print(time.gmtime(time.time()-86640)) #将utc时间戳转换成struct_time格式 # print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将utc struct_time格式转成指定的字符串格式 #时间加减 import datetime # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925 #print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 2016-08-19 # print(datetime.datetime.now() ) # print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天 # print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天 # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时 # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分 # c_time = datetime.datetime.now() # print(c_time.replace(minute=3,hour=2)) #时间替换
3、random模块
import random print(random.random()) # 随机浮点数0——1 print(random.randint(1, 4)) #左闭,右闭 print(random.randrange(1, 10, 2)) # 1-10,步长为2 print(random.choice()) print(random.sample('hello', 2)) # 前2个字符选择 print(random.uniform(1, 10)) # 随机浮点数 random.shuffle() # 打乱顺序 chr(44) # assic码数字转换为字母
import random # 验证码功能 checkcode = '' for i in range(4): current = random.randrange(0, 4) # [0, 4) # 字母 if current == i: tmp = chr(random.randint(65, 90)) # sacci码中[65, 90]转换为对应的字母 # 数字 else: tmp = random.randint(0, 9) checkcode += str(current) print(checkcode)
4、os模块
import os os.getcwd() # 获取当前目录 os.chdir () # 改变当前脚本的目录 os.curdir () # 返回当前目录 os.pardir () # 获取当前目录的父目录字符串 os.makedirs () # 生成多层递归目录 os.removedirs() # 若目录为空,则删除,并递归到上一层目录,若也为空则删除,一次类推 os.mkdir() # 生成单级目录 os.rmdir() # os.listdir() # 列表返回目录 os.remove() # 删除文件 os.stat() # 获取文件状态 os.sep() os.linesep() os.pathsep() os.name # 当前系统名 os.system() # 执行命令 os.environ () # 字典形式显示路径 os.path.abspath (path) # 获取绝对路径 os.path.split () # 分隔目录 os.path.dirname() os.path.basename() # 获取目录名 os.path.exists () # 判断是否是存在 os.path.isabs () # 判断是否是绝对路径 os.path.isfile() # 判断是否是文件 os.path.isdir() # 的判断是否是目录 os.path.join() # os.path.getatime (path) # 获取最后存取的时间 os.path.getmtime() # 获取最后生成的时间
5、sys 模块
6、shutil 模块
7、json & pichle 模块
json
pichle
8、shelve模块
只支持pichle
9、xml 处理模块
xml 实现不同语言或程序之间数据交换协议
10、pyyaml 模块
11、configparser 模块
12、hashlib 模块
用于加密
13、re 模块
10.1 模块基本使用
# 引入模块 import module1, module2....... # 调用模块中的函数 模块名.函数名 # 引入模块中的某个函数 from 模块名 import 函数名1, 函数名2..... from fib import fibonacci # 把模块的内容全部导入当前的命名空间 from 模块名 import * from math import *
10.2 模块制作
# 模块test01.py def add(a, b): return a + b # 用来测试
# 本文件单独运行时运行测试语句,被调用成模块时,不运行 if __name__ == '__main__': result = add(11, 22) print('int test02.py file, __name__ is %s'%__name__)
# 调用模块test02.py from test02 import add result = add(11, 22) print(result)