#装饰器架构
def timmer(func): #参数是函数名 def wrapper(): #嵌套函数 pass return wrapper #return一个函数名
#装饰器框架
def timmer(func): def wrapper(): print(func) #作用域 func这一层没有去上一层拿 得到内存地址 func() #运行func函数 return wrapper
#基本装饰器 但是如果test加上个return就有个小问题
import time def timmer(func): def wrapper(): print(func) start_time = time.time() func() #运行test() func这一层没有去上一层找 这就是闭包 end_time = time.time() print("运行时间是%s" %(start_time-end_time)) return wrapper
@timmer #test = timmer(test)
def test(): #test就是原本的函数
time.sleep(3) print("test函数运行完毕")
# res = timmer(test) #返回的是wrapper的地址
# res() #执行wrapper函数
#test = timmer(test) #返回的是wrapper的地址 #但是还是不行 以为还是要赋值
#test() #执行wrapper函数
#@timmer 就想当于test = timmer(test) 这个是python提供的功能
#怎么解决return问题 但是还有个问题 如果test里有参数,但是参数不固定,这样的话就不得不在wrapper加参数,但是个数不固定怎么解决
import time def timmer(func): def wrapper(): print(func) start_time = time.time() res= func() #通过赋值以及最后的return解决了上一代码的return问题 end_time = time.time() print("运行时间是%s" %(start_time-end_time))
return res #return res return wrapper @timmer def test(): time.sleep(3) print("test函数运行完毕") test = timmer(test) test()
import time def timmer(func): def wrapper(*args,**kwargs): #*args以及**args 假如传的值是 (“吴大哥”,“age”=18) 那么这一行得到的就是[吴大哥”],{“age”:18} print(func) start_time = time.time() res= func(*args,**arge) #*args以及**kwargs接受参数 那么这一行就变成了*[吴大哥],**{"age":18] end_time = time.time() print("运行时间是%s" %(start_time-end_time)) return res return wrapper @timmer def test(): time.sleep(3) print("test函数运行完毕") test = timmer(test) test()
import time def timmer(func): def wrapper(*args,**kwargs): start_time=time.time() res=func(*args,**kwargs) stop_time = time.time() print('运行时间是%s' %(stop_time-start_time)) return res return wrapper @timmer #记得引用装饰器 def test1(name,age,gender): #原函数要加形参 time.sleep(1) print('test1函数运行完毕,名字是【%s】 年龄是【%s】 性别【%s】' %(name,age,gender)) return '这是test的返回值' test1('alex',18,'male') #一定要给实参
补充:如果有一个很大的序列怎么取得最开始和最后的值?
#以下是解压序列,通过一一对应的方式取得值 a,b,c=1,2,3 print(a) print(b) print(c)
1
2
3
#以解压序列为基础
l=1,2,3 a,*d,c=l #or a,*_,c=l *号后面可以是任何东西 但是要放东西 比如d跟下划线_ 因为这个东西就代表着中间所有的值 print(c)
#内置的python功能 用来交换两个变量的值
f1=1 f2=2 f1,f2=f2,f1 print(f1) 2