三元运算符:
三元运算符模式:
接收 = 条件真确的返回值 if 条件 else 条件False的返回值
代码:
# 三元运算符: ret = '正确' if 3<5 else '错误' print(ret)
time模块初始:
time模块是时间模块,方法初学了time.time和time.sleep
time.time()是计算从1970年到现在的时间数,小数点前边是秒,后边是千分之一秒
time.sleep()是让程序执行到该代码时沉睡括号内的时间数,秒为单位
代码:
# time模块: # 导入time模块 import time # 定义一盒函数让该函数打印一段话并且程序执行五秒钟后执行打印 # 并且得到运行程序时间 def prin(): s1 = time.time() # 得到1970年到程序开始时间现在的秒数时间 time.sleep(5) # 让程序沉睡五秒 print('再也不做测量') # 执行程序 s2 = time.time() return s2 - s1 print(prin()) # 得到结果:再也不做测量 # 5.001978874206543
装饰器(wrapper):
1.装饰器的形成过程:
最简答的装饰器,有返回值的装饰器,带参数的装饰器,万能参数装饰器
2.装饰器的作用:
不修改函数的调用方式的情况下添加函数的功能
3.原则:开放封闭原则:
开放:对扩展功能是开放的
封闭:对修改是封闭的
4.装饰器的固定模式:
代码:
# 装饰器的定义: # 实现调用func函数时让func函数沉睡5秒并得到程序执行时间 # 导入time模块 import time def wrapper(f): # 定义一个装饰器,并且传入需要装饰的函数名 def interior(*args,**kwargs): #定义一个内部函数,为了保证被装饰传入实参是能正常运行 s1 = time.time() # 得到当前时间 time.sleep(5) #让调用前就先沉睡五秒就不用去修改别的代码 ret = f(3,5) # 调用传入函数并赋值给ret s2 = time.time() # 得到执行程序后的时间 # 为了防止被装饰的函数有返回值所以做一个返回 return '被装饰函数的返回值是:{},本次执行程序时间是:{}'.format(ret,s2-s1) return interior def func(x,y): return x+y # 调用装饰器并且传入需要装饰的函数,为了使调用不变所以增加接收值为被装饰函数名 func = wrapper(func) # 调用wrapper装饰器,就等于func(),有返回值所以做打印 print(func()) # 被装饰函数的返回值是:8,本次执行程序时间是:5.002722263336182
5.语法糖:
@装饰器
被装饰的函数
代码: 对上边代码做优化
# 语法糖: # 实现调用func函数时让func函数沉睡5秒并得到程序执行时间 # 导入time模块 import time def wrapper(f): # 定义一个装饰器,并且传入需要装饰的函数名 def interior(*args,**kwargs): #定义一个内部函数,为了保证被装饰传入实参是能正常运行 s1 = time.time() # 得到当前时间 time.sleep(5) #让调用前就先沉睡五秒就不用去修改别的代码 ret = f(3,5) # 调用传入函数并赋值给ret s2 = time.time() # 得到执行程序后的时间 # 为了防止被装饰的函数有返回值所以做一个返回 return '被装饰函数的返回值是:{},本次执行程序时间是:{}'.format(ret,s2-s1) return interior # func = wrapper(func) @wrapper # 相当于 def func(x,y): return x+y # 调用装饰器并且传入需要装饰的函数,为了使调用不变所以增加接收值为被装饰函数名 # func = wrapper(func) 这里被替换到被装饰函数的顶头一行写入@装饰器 # 调用wrapper装饰器,就等于func(),有返回值所以做打印 print(func()) # 被装饰函数的返回值是:8,本次执行程序时间是:5.002722263336182
相当于:被装饰函数 = 装饰器(被装饰函数名)
6.装饰带参数的装饰器:
装饰器增加形参*args,**kwargs,装饰器内部函数调用时也要传入相同的形参