前端day2—装饰器

装饰器的本质还是一个函数,在不改变函数调用方式的情况下,对函数进行额外功能的封装
装饰一个函数,转给他加一个其他功能
函数在没调用前都是字符串,加了括号才是运行

函数即变量
def out(func):
func() #这样相当于func是个变量
def demo():
print(111)
out(demo)
#打印111,相当于demo就是那个参数

嵌套函数:
def out():
def inner():
print(111)
out()

#这样不会打印,因为没有调用inner,inner那坨相当于字符串

def out():
def inner():
print(111)
inner()
out()
#这样才打印111

def out():
name='dsx'
def inner():
name='zy'
print(name)
inner()
print(name)
out()

#打印zy
dsx

def out():
name='dsx'
def inner():
print(name)
inner()
print(name)
out()

#打印dsx
dsx

给每个函数加上运行时间:
import time
def demo():
print('我是大师兄!')
def out():
start=time.time()
demo()
end=time.time()
print(end-start)
out()


import time
def demo():
print('我是大师兄!')
def demo1():
print('我是师兄!')
def out(func):
start=time.time()
func()
end=time.time()
print(end-start)
out(demo)
out(demo1)


import time
def demo():
print('我是大师兄!')

def out(func): #这个函数返回值为inner,inner为out()函数的返回值
def inner():
start=time.time()
func()
end=time.time()
print(end-start)
return inner #返回了inner的方法,但是没有调用
demo=out(demo) #demo=inner 将inner赋值与demo
demo() #其实是运行inner()



import time

def out(func):
def inner():
start=time.time()
func()
end=time.time()
print(end-start)
return inner
@out
def demo():
print('我是大师兄!')
demo()

#demo=out(demo)相当于等于@out


import time

def out(func):
def inner(*args,**kwargs):
start=time.time()
func(*args,**kwargs)
end=time.time()
print(end-start)
return inner
@out
def demo(name):
print(name)
demo(1)


import time
def auto(type):
if type==1:
def out(func):
def inner(*args,**kwargs):
start=time.time()
func(*args,**kwargs)
end=time.time()
print(end-start)
return inner
return out
elif type==2:
pass
@auto(1) #如果装饰器加了括号,就要在外在加一层函数
def demo(name): #将demo起名为func也可以
print(name)
demo(1)
posted @ 2018-10-27 22:34  apollecn  阅读(137)  评论(0编辑  收藏  举报