欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python装饰器 百日筑基之得气

程序员文章站 2022-03-20 20:01:58
模块:模块是一系列常用功能的集合体,一个py文件就是一个模块1、从文件级别组织程序,更方便管理随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能 ......

模块:
模块是一系列常用功能的集合体,一个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模块的时间转换方式:

Python装饰器 百日筑基之得气

从时间戳到字符串时间的转换:

 

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 = ..