文章目录
定义:
某个功能代码的集合,为了完成业务需求,采用拿来主义,直接调用即可,把更多的时间放在逻辑处理。
模块分为三类:
- 自定义模块
- 内置标准库
- 开源模块
使用模块的好处
提高代码的可维护性
编写代码不需要从0开始
模块和包导入方法
模块是为了组织函数方法,就是一个*.py;包是为了组织模块,是多个模块的集合,包含一个__init__.py文件
import 导入某个模块名(通过sys.path找到对应的文件)
import 导入某个包 执行__init__.py文件
from 模块 import 方法
from 包 import 模块
from 包.模块 import 方法
from…import… 首次导入模块发生了3件事:
1:执行模块文件。
2:运行模块文件中的代码,将产生的名字与值存放到当前模块的名称空间中。
3:在当前执行文件的名称空间中拿到一个名字,该名字直接指向模块中的某一个名字,意味着可以不用加模块名这个前缀而直接使用。
优点:不用加前缀,代码更加精简。
缺点:不加前缀容易与当前执行文件中名称空间中的名字冲突。
import 和 from…import 的异同之处
相同点:
1:两者都会执行模块对应的文件,两者都会产生模块的名称空间。
2:两者调用功能时,需要跑到定义时寻找作用域关系,与调用位置无关。
不同点:
1:import 需要加前缀,from...import... 不需要加前缀。
导入模块发生的三件事。
1.先执行当前执行文件,会产生当前执行文件的名称空间
2.加载被导入模块时,会执行被导入模块代码,会产生被导入模块中名称空间
3.将被导入模块中的名称空间加载到内存中
首次导入模块
只会加载一次,将加载后的模块的名称空间放入内存中,
下次获取名字时优先从内存中获取。
import demo
import demo
给模块起别名
import 模块 as 模块的别名
解决循环导入问题的两种方式
- 在名字定义后导入模块
- 在函数内部导入模块,让被导入的模块加载到局部名称空间中。
路径问题
import os,sys
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
'''
__file__:指的是当前文件位置的相对路径
os.path.abspath(__file__):返回当前文件位置的绝对路径
os.path.dirname(os.path.abspath(__path__)):返回当前文件路径的上一级路径
'''
from module.main1 import main
main()
'''
也可以使用这种方法
from moudule import main1
main1.main()
'''
一:包
包是内部有__init__.py的文件夹,用于管理模块。
二、time 模块。
时间的相关操作,有三种表现形式
- 获取时间戳:给机器看的
time.time()
- 格式化时间(Format String): 给人类看的
年月日
time.strftime('%Y-%m-%d')
时分秒
time.strftime('%H-%M-%S')
time.strftime('%X')
- 格式化时间对象(struct_time)
time_obj = time.localtime(time.time())
time_obj.tm_year
时间戳 :1970年1月1日之后的秒 即:time.time()
格式化的字符串 : 2019-11-11-11 即:time.strftime('%Y-%m-%d')
结构化时间 元组包含了:年月日等 即: time.localtime() 北京时间 (time.gmtime() UTC时间)
time.strftime("%Y{a}-%m{b}-%d{c} %X", time.localtime()).format(a='年',b='月',c='日')
time.strptime('2019-05-05 16:37:06', '%Y-%m-%d %X')
输出指定字段如年使用a.tm_year,其他类似
b=time.mktime(a) 把struct_time转换为时间戳
三、datetime模块
datetime.datetime.now() 输出一个标准时间:2019-01-07 16:44:57.614705
# 获取日期时间
datetime.datetime.today()
datetime.datetime.now()
datetime.date.today()
# 获取日期"隔间"对象
空的间隔_obj = datetime.datetime.timedelta()
print(空的间隔_obj) ---> 0:0:0
# 获取7天时间间隔
day7_obj = datetime.datetime.timedelta(days=7)
# 时间计算公式:
- 日期时间 = 日期时间 + or - 时间对象
- 时间对象 = 日期时间 + or - 日期时间
# 获取当前时间7天后的时间
day7_obj = datetime.datetime.timedelta(days=7)
- 日期时间 = 日期时间 + or - 时间对象
current_time = datetime.datetime.now()
later_time = current_time + day7_obj
print(later_time) # 2019-11-25 09:18:XX
四、random模块
import random
print(random.random()) #产生0,1的小数
print(random.randint(1,2)) #产生1,2的整数,包括2
print(random.randrange(1,10)) #产生一个范围的整数,不包括10
产生四位随机大小验证码
import random
checkcode = ''