day-14 装饰器和模块
1.装饰器(给函数添加功能)
1.装饰器的作用:给已经定义好的函数添加新功能的
2.装饰器语法:
? 装饰器 = 实参高阶函数 + 返回值高阶函数 + 糖语法(@需要添加功能的函数)
"""
def 装饰器名称(旧函数):
def 新函数(*args, **kwargs):
result = 旧函数(*args, **kwargs)
实现新增的功能
return result
return 新函数
"""
import time
def total_time(old_fn):
def new_fn(*args, **kwargs):
start = time.time()
result = old_fn(*args, **kwargs)
end = time.time()
print(f'{start - end}s')
return result
return new_fn
@total_time
def download(name):
print(f'{name}开始下载')
print('电影下载中')
print(f'{name}结束下载')
download('当幸福来敲门')
def add_print(old_fn):
def new_fn(*args, **kwargs):
print('start')
result = old_fn(*args, **kwargs)
return result
return new_fn
@add_print
def old_print():
print('----')
old_print()
def add_num(old_fn):
def new_fn(*args, **kwargs):
result = old_fn(*args, **kwargs)
if type(result) in (int, float):
return 10000 * result
return result
return new_fn
@add_num
def func(x):
return x
result_num = func(98)
print(result_num)
result_num1 = func('98')
print(result_num1)
2.模块的导入
1.模块
python中一个py文件就是一个模块;可以在一个模块中使用另外一个模块中的内容,前提:1)被另外一个模块使用的模块的名字必须符合变量名的要求;2)被使用之前需要导入
2.导入模块
"""
1)导入方式1
import 模块名 - 直接导入指定模块,导入后能通过“模块名.”的方式使用模块中所有的全局变量
2)导入方式2
from 模块名 import 变量名1,变量名2,变量名3,... - 通过模块导入指定内容,导入后直接使用指定的变量
3)导入方式3
from 模块名 import * - 通过模块导入模块中所有的全局变量,导入后直接使用变量
4)导入方式4:重命名
import 模块名 as 新模块名 - 使用模块的时候用新模块名来使用
from 模块名 import 变量名1 as 新变量名1, 变量名2,...
"""
3.导入模块的原理
? 当代码执行到导入模块的时候,系统会自动进入该模块,将模块中的所有代码都执行一遍
3.包的导入
1.怎么导入包中的模块
"""
1)import 包名 - 要修改__init__.py文件才有意义,否则无用
2)import 包名.模块名
3)from 包名 import 模块名
4)from 包名.模块名 import 变量名1,变量名2,...
"""
2.导入包的原理
导入包中的模块内容,系统会先执行包中__init__.py中的内容,再执行模块中的内容
4.数学模块
? math - 普通数字相关的数字函数
? cmath - 复数相关的数据函数
? 普通数字(int, float)
? 复数(complex): a+bj (a和b均为实数,a为实部,b为虚部,j为虚数单位;j**2 == -1)
x =10 + 2j
y = 20 - 3j
print(type(x))
print(x + y)
print(x * y)
print(math.ceil(1.9))
print(math.ceil(1.1))
print(math.floor(1.9))
print(math.floor(2.4))
print(math.sqrt(16))
print(round(1.9))
print(round(1.3))
5.时间模块
1.获取当前时间
2.时间戳:以当前时间到1970年1月1日0时0分0秒(格林威治时间)的时间差来记录一个时间(时间差的单位是秒)
t1 = time.time()
print(t1)
3.获取本地时间
t2 = time.localtime()
print(t2)
t3 = time.localtime(0)
print(t3)
4.睡眠 - 让程序暂停运行
time.sleep(2)
print('======')
5.将结构体时间转换成时间戳
t2 = time.localtime()
t5 = time.mktime(t2)
print(t5)
|