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()