函数装饰器

#-----函数装饰器-----
 
1、作用域:L _E_G_B
2、高阶函数 a、函数名可以作为参数输入 b、函数名可以作为返回值
3、闭包
1 def outer():
2     x = 10
3     def inner(): #inner是内部函数
4         print(x) #外部环境的一个变量
5     return inner #内部函数inner就是一个闭包
6 outer()()
7 
8 #inner() #1、局部变量,全局变量无法调用


#-----关于闭包-----

  闭包 = 函数 + 定义函数时的环境

#代码原则:开放封闭原则  代码书写原则(对修改封闭,对扩展开放)

#-----装饰器函数

 1 import time
 2 
 3 def show_time(f): #装饰器函数
 4     def inner():
 5         start = time.time()
 6         f()
 7         time.sleep(1)
 8         end = time.time()
 9         print("spend %s"% (end-start))
10     return inner
11 
12 @show_time
13 def foo():
14     print('test')
15 #foo=show_time(foo)
16 foo()
17 
18 @show_time
19 def bar():
20     print('bar')
21 # bar = show_time(bar)
22 bar()
23 
24 def show_time(f):
25     def inner(x,y):
26         start = time.time()
27         f(x,y)
28         time.sleep(1)
29         end = time.time()
30         print(end-start)
31     return inner
32 
33 @show_time
34 def add1(a,b):
35     print(a+b)
36 add1(1,2)
#-----装饰器加参数

 1 def logger(flag='False'):
 2     def show_time(f):
 3         def inner(*args):
 4             start_time = time.time()
 5             f(*args)
 6             time.sleep(1)
 7             end_time = time.time()
 8             print(end_time-start_time)
 9             if flag == "True":
10                 print('log!')
11         return inner
12     return show_time
13 
14 @logger('True')
15 def add(*args):
16     sum1 = 0
17     for i in args:
18         sum1 += i
19     print(sum1)
20 
21 add(1,2,4)
#-----用户信息登录验证小程序-----

#-----创建用名密码
 1 import json
 2 
 3 def create_user(a,b,c,d):
 4     d = {
 5         "name":a,
 6         "passwd":b
 7     }
 8     with open(c,"w") as f:
 9         json.dump(d,f)
10 create_user("dream","abc123","jd.json","jd_list")
11 create_user("rise","rise123","qq.json","qq_list")
12 create_user("wx","wx123","wx.json","wx_list")
#-----用户信息验证
 1 import json
 2 
 3 login_status = "False"
 4 def login(auth_type):
 5     def verify(func):
 6         def inner():
 7             global login_status
 8             flag = True
 9             while flag:
10                 c_list = ['jd','qq','wx']
11                 for i in c_list:
12                     if auth_type == i.strip():
13                         files = auth_type
14                         u_name = input("please input %s name:" % files).strip()
15                         u_passwd = input("please input %s passwd:" % files).strip()
16                         with open(("%s.json") % files, "r") as f:
17                             data = json.load(f)
18                             name = data["name"]
19                             passwd = data["passwd"]
20                             if u_name == name and u_passwd == passwd:
21                                 login_status = "True"
22                                 func()
23                                 flag = False
24             else:
25                 func()
26         return inner
27     return verify
28 
29 @login("jd")
30 def home():
31     print("welcome to home page")
32 home()
33 
34 @login("qq")
35 def finance():
36     print("welcome to finance page")
37 finance()
38 
39 @login("wx")
40 def book():
41     print("welcome to book page")
42 book()

原文地址:https://www.cnblogs.com/rise-home/p/11597424.html