1闭包复习
#函数名 就是一串内存地址 可以赋值 可以作为容器类型的元素 、函数的参数和 返回值 第一类对象 # 闭包 def outer(): a=1 def inner(): print(a) return inner i=outer() i() <<< 1
2作业讲解
#2.写函数接收n个数字求这些参数数字的和 def sum_fun(*args): total=0 for i in args: total+=i return total print(sum_fun(1,2,8)) <<< 11
#读代码 回答代码中打印出来的abc分别是什么 为什么 a=10 b=20 def test5(a,b): print(a,b) c=test5(b,a) print(c) #20,10 b=20 a=13 def test5(a,b): a=3 b=5 print(a,b) c=test5(b,a) print(c) #3,5 内部有就不跟上级要了 <<< 20 10 None 3 5 None
time 模块
import time print(time.time()) #返回当前时间的时间戳(1970纪元后经过的浮点秒数)1544769062.0091138 time.sleep(3) #让程序执行到这个位置时停一会 print('111') <<< 1544773092.0564687 111
3初识装饰器
1.装饰器
'''装饰器的作用:不想修改函数的调用方式,但是还想在原来的函数前后添加功能 原则:开放封闭原则 开放对拓展是开放的 对修改是封闭的 语法糖@ 装饰器的固定模式''' #timemer就是一个装饰器函数 只是对一个函数有一些装饰作用 import time def timmer(f): #装饰器函数 def inner(): start=time.time() ret=f() #被装饰的函数 end=time.time() print(end-start) return ret return inner @timmer #语法糖@ 装饰器函数名 def func(): #被装饰的函数 time.sleep(0.01) print("老板好") return '新年好' #func=timemer(func) #有了@timmer 就不用这一行了 ret=func() print(ret) <<< 老板好 0.015593528747558594 新年好
2.封板
#封板 def outer(): def inner(): print('kkk') return 'inner' print('lll') return inner() print(outer()) <<< lll kkk inner
3.装饰带参数函数的装饰器
#装饰带参数函数的装饰器 import time def timmer(f): def inner(*args,**kwargs): start=time.time() ret=f(*args,**kwargs) end=time.time() print(end-start) return ret return inner @timmer def func(a,b): time.sleep(1) print('老板好',a,b) return '新年好' #func=timmer(func) ret=func(1,2) #inner(1,2) ret1=func(1,b=3) #inner(1,2) print(ret,ret1) <<< 老板好 1 2 1.0005967617034912 老板好 1 3 1.0001435279846191 新年好 新年好
4.装饰器的固定模式
#装饰器的固定模式 import time def wrapper(f): #wrapper是装饰器函数 f是被装饰的函数 def inner(*args,**kwargs): '''在被装饰函数之前要做的事''' ret=f(*args,**kwargs) '''在被装饰函数之后要做的事''' return ret return inner @wrapper #相当于func=wrapper(func) def func(a,b): time.sleep(1) print('hhhh',a+b) return '666' print(func(1,5)) #相当于inner(1,5) <<< hhhh 6 666
def wrapper(): def inner(): pass return inner