Python装饰器 百日筑基之得气
模块:
模块是一系列常用功能的集合体,一个py文件就是一个模块
1、从文件级别组织程序,更方便管理
随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用
2、拿来主义,提升开发效率
同样的原理,我们也可以下载别人写好的模块然后导入到自己的项目中使用,这种拿来主义,可以极大地提升我们的开发效率,避免重复造*。
每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,
就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突
导入模块
import 模块名,模块名,模块名 可以写多个,但是不建议这么写.建议分开写,多行导入:易于阅读 易于编辑 易于搜索 易于维护。
import 导入过来的功能都需要,使用模块点的方法去执行
import 模块名 as 别名 为模块起别名
from 模块名 import 函数名,函数名 可以单独导出相应的函数,而不用导出所有函数.
from 模块名 import 函数名 as 别名,函数名 as 别名 可以更改多个.
from 模块名 import * 导出模块下所有函数,不推荐使用
# __all__ = ['可以被*导入的内容,是一个列表'] 用这种方式强制*只导出相应的函数
if __name__ == '__main__': # 可以在下面放一些需要测试的函数,下面的函数会被导入时所执行.
模块的搜索顺序:
内存中已经加载的模块->内置模块->sys.path路径中包含的模块
import sys
print(sys.path) # 打印当前环境变量
如果要添加其它盘符中的模块,需要把模块的路径加载到python的环境中去.
sys.path.insert(0,r'模块路径') # 将模块路径插入python环境中
编译python文件
为了提高加载模块的速度,提高的是加载速度而绝非运行速度。python解释器会在__pycache__目录中下缓存每个模块编译后的版本,格式为:module.version.pyc。通常会包含python的版本号。例如,在cpython3.3版本下,spam.py模块会被缓存成__pycache__/spam.cpython-33.pyc。这种命名规范保证了编译后的结果多版本共存。
python检查源文件的修改时间与编译的版本进行对比,如果过期就需要重新编译。这是完全自动的过程。并且编译的模块是平*立的,所以相同的库可以在不同的架构的系统之间共享,即pyc使一种跨平台的字节码,类似于java火.net,是由python虚拟机来执行的,但是pyc的内容跟python的版本相关,不同的版本编译后的pyc文件不同,2.5编译的pyc文件不能到3.5上执行,并且pyc文件是可以反编译的,因而它的出现仅仅是用来提升模块的加载速度的,不是用来加密的。
#提示:
1.模块名区分大小写,foo.py与foo.py代表的是两个模块
2.在速度上从.pyc文件中读指令来执行不会比从.py文件中读指令执行更快,只有在模块被加载时,.pyc文件才是更快的
3.只有使用import语句是才将文件自动编译为.pyc文件,在命令行或标准输入中指定运行脚本则不会生成这类文件.
time模块
在计算机中时间共有三种方式:
1.时间戳: 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型
2.格式化字符串时间: 格式化的时间字符串(format string): ‘1999-12-06’
3.结构化时间:元组(struct_time) struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%h 24小时制小时数(0-23)
%i 12小时制小时数(01-12)
%m 分钟数(00=59)
%s 秒(00-59)
%a 本地简化星期名称
%a 本地完整星期名称
%b 本地简化的月份名称
%b 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地a.m.或p.m.的等价符
%u 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%w 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%x 本地相应的时间表示
%z 当前时区的名称
%% %号本身
time模块的时间转换方式:
从时间戳到字符串时间的转换:
import time ntime = time.time() print("时间戳:%d" % (ntime)) structtime = time.localtime(ntime) print("结构化时间:",structtime) strtime = time.strftime("%y-%m-%d %h:%m:%s",structtime) print("字符串时间:",strtime) # 打印内容如下: 时间戳:1547561163 结构化时间: time.struct_time(tm_year=2019, tm_mon=1, tm_mday=15, tm_hour=22, tm_min=6, tm_sec=3, tm_wday=1, tm_yday=15, tm_isdst=0) 字符串时间: 2019-01-15 22:06:03
从字符串时间回退到时间戳:
strtime = "2019-01-15 22:06:03" print("字符串时间:",strtime) struct_time = time.strptime(strtime,"%y-%m-%d %h:%m:%s") print("结构化时间:",struct_time) ntime = time.mktime(struct_time) print("时间戳:",ntime) # 打印内容如下: 字符串时间: 2019-01-15 22:06:03 结构化时间: time.struct_time(tm_year=2019, tm_mon=1, tm_mday=15, tm_hour=22, tm_min=6, tm_sec=3, tm_wday=1, tm_yday=15, tm_isdst=-1) 时间戳: 1547561163.0
datetime模块
from datetime import datetime print(datetime.now()) # 获取当前时间 # 打印内容如下: 2019-01-15 22:16:08.941898
指定时间并创建一个datetime的类
from datetime import datetime dt = datetime(2019,1,15,22,20,0) print(type(dt),dt) # 打印内容如下: <class 'datetime.datetime'> 2019-01-15 22:20:00
datetime转换时间戳:
from datetime import datetime dt = datetime.now() new_timestamp = dt.timestamp() print(new_timestamp) # 打印内容如下: 1547562274.605821
将时间戳转换成字符串时间
from datetime import datetime ntime = datetime.timestamp(datetime.now()) # 时间戳 print(datetime.fromtimestamp(ntime)) # 打印内容如下: 2019-01-15 22:29:50.470887
将str转换成datetime
from datetime import datetime ntime = datetime.strptime("2019-1-15","%y-%m-%d") print(type(ntime),ntime) # 打印内容如下: <class 'datetime.datetime'> 2019-01-15 00:00:00
将datetime转换成str
from datetime import datetime ntime = datetime.now() strtime = datetime.strftime(ntime,"%y-%m-%d %h:%m:%s") print(type(strtime),strtime) # 打印内容如下: <class 'str'> 2019-01-15 22:39:44
datetime的加减法
需要使用timedelta类
from datetime import datetime,timedelta ntime = datetime.now() print("当前时间:",ntime) othertime = ntime - timedelta(days=1) print("减去一天后的时间:",othertime) # 打印内容如下: 当前时间: 2019-01-15 22:46:05.038629 减去一天后的时间: 2019-01-14 22:46:05.038629
timedelta可选参数
days: float = ...,
seconds: float = ...,
microseconds: float = ...,
milliseconds: float = ...,
minutes: float = ...,
hours: float = ...,
weeks: float = ..., *,
fold: int = ..
下一篇: Dijkstra学习笔记