python 装饰器

 
 1 def yang(func):
 2     def gou():
 3         print('it is gou')
 4         func()
 5         pass
 6     return gou
 7 
 8 @yang
 9 def nnn():
10     print('it is nnn')
11     pass
12 nnn()
解释:
nnn=yang(func),也就是说func=nnn,传过去之后正常运行,下面声明了一个变量然后直接返回了gou的内存地址,所以说yang+nnn其实得到的就是返回gou的内存地址,gou的内存地址里有nnn原来的东西,也有我新加的东西,其实yang的作用就是为了拿到我新加内容的这个函数的内存地址然后nnn=yang(nnn)这个操作就是把nnn和yang关联起来,还是上面说的func=nnn,然后直接nnn(),这个其实执行的是gou(),nnn=yang(nnn)可以用@yang代替。
 1 #下面的例子是增加一个账号密码的验证,详细演示说明下
 2 user,passwd = 'lizhe','abc123'
 3 
 4 def login1(func): #login1(func) = login1(one),
 5     def login2():
 6         username = input('username:')
 7         password = input('password:')
 8         if username == user and password == passwd:
 9             print('is good')
10         else:
11             print ('is woring')
12         func()
13     return login2  #这个返回地址就是执行login1(one)后返回login2的返回地址里面有新加的东西还有原来one()执行的结果,拿过来加()其实就可以执行了
14 
15 @login1 #login1 = login1(one),func = one
16 def one():
17     print('yuan shi shu ju')
18     pass

 1 #下面的例子是增加一个账号密码的验证外加参数-高级版
 2 user = 'lizhe'
 3 passwd= 'abc123'
 4 def login3(type_num1):
 5     def login1(func):
 6         def login2(*args,**kwargs):
 7             if type_num1 == 'one':
 8                 user1 = input('please input you user and passws:')
 9                 passwd1 = input('please input you passwd:')
10                 if user1 == user and passwd1 == passwd:
11                     print('user pass OK!!!')
12                 else:
13                     print('user passwd eroor!!!')
14                 func(*args,**kwargs)
15                 pass
16             elif type_num1 == 'two':
17                 print ('tow tow bu shi two')
18         return login2
19     return login1
20 
21 @login3(type_num1='one')
22 def htm1():
23     print('is htm1')
24     pass
25 @login3(type_num1='two')
26 def htm2(name):
27     print('is htm2',name)
28     pass
29 
30 
31 htm1()

 



posted @ 2017-12-18 22:27  鲸梦。  阅读(106)  评论(0)    收藏  举报