Python基础阶段:装饰器函数案例

 1 # 定义两个功能函数
 2 def fss():
 3     checkLogin()
 4     print("发说说")
 5 
 6 
 7 def ftp():
 8     checkLogin()
 9     print("发图片")
10 
11 
12 def checkLogin():
13     print("登录验证...")
14 
15 
16 # 相关的逻辑代码
17 btnIndex = 2
18 if btnIndex == 1:
19     fss()
20 else:
21     ftp()
22 
23 
24 # 发说说, 发图片, 必须有一个前提, 就是, 用户必须登录之后,
25 # 登录验证的操作
26 
27 # 1. 直接在业务逻辑代码里面去修改, 添加一个验证操作
28 #   因为业务逻辑代码非常多, 所以, 就造成了, 每一份, 逻辑代码, 在调用, 具体的功能函数之前, 都需要, 去做一个登录验证, 代码冗余度, 就比较大, 代码的复用性比较差, 代码的维护性比较差
29 
30 
31 # 2, 直接在功能函数里面, 去修改, 方便代码的重用
View 1
 1 def checkLogin(func):
 2     def inner():
 3         print("登录验证...")
 4         func()
 5     return inner
 6 
 7 # 定义两个功能函数
 8 @checkLogin
 9 def fss():
10     print("发说说")
11 
12 # fss = checkLogin(fss)
13 
14 # fss = def inner():
15 #         print("登录验证...")
16 #         fss()
17 #
18 # print(fss)
19 
20 # 语法糖 写法
21 @checkLogin
22 def ftp():
23     print("发图片")
24 # ftp = checkLogin(ftp)
25 
26 
27 
28 # 相关的逻辑代码
29 btnIndex = 1
30 if btnIndex == 1:
31     fss()
32 else:
33     ftp()
34 
35 
36 # 发说说, 发图片, 必须有一个前提, 就是, 用户必须登录之后,
37 # 登录验证的操作
38 
39 # 1. 直接在业务逻辑代码里面去修改, 添加一个验证操作
40 #   因为业务逻辑代码非常多, 所以, 就造成了, 每一份, 逻辑代码, 在调用, 具体的功能函数之前, 都需要, 去做一个登录验证, 代码冗余度, 就比较大, 代码的复用性比较差, 代码的维护性比较差
41 
42 
43 # 2, 直接在功能函数里面, 去修改, 方便代码的重用
View 2
 1 # 给发说说函数增加一些额外的功能,
 2 # 1. 函数名字不能发生改变
 3 # 2. 函数体内部的代码不能发生改变
 4 
 5 
 6 def check(func):
 7     print("xxx")
 8     def inner():
 9         print("登录验证操作....")
10         func()
11     return inner
12 
13 @check
14 def fss():
15     print("发说说")
16 
17 # fss = check(fss)
18 
19 
20 
21 
22 # fss()
View 3
def zhuangshiqi_line(func):
    def inner():
        print("---------------------------")
        func()
    return inner


def zhuangshiqi_star(func):
    def inner():
        print("*" * 30)
        func()
    return inner

@zhuangshiqi_line # == print_content = zhuangshiqi_line(print_content)
@zhuangshiqi_star # == print_content =  zhuangshiqi_star(print_content)

# print("---------------------------")
# print("*" * 30)
# print("123")
def print_content():
    print("123")



print_content()
View 4
 1 def zsq(func):
 2     def inner(*args, **kwargs):
 3         print("_" * 30)
 4         # print(args, kwargs)
 5         func(*args, **kwargs)
 6     return inner
 7 
 8 
 9 @zsq
10 def pnum(num, num2, num3):
11     print(num, num2, num3)
12 
13 @zsq
14 def pnum2(num):
15     print(num)
16 
17 
18 pnum(123, 222, num3=666)
19 pnum2(999)
View 5
 1 def zsq(func):
 2     def inner(*args, **kwargs):
 3         print("_" * 30)
 4         # print(args, kwargs)
 5         res = func(*args, **kwargs)
 6         return res
 7     return inner
 8 
 9 
10 @zsq
11 def pnum(num, num2, num3):
12     print(num, num2, num3)
13     return num + num2 + num3
14 
15 
16 @zsq
17 def pnum2(num):
18     print(num)
19 
20 
21 
22 res1 = pnum(123, 222, num3=666)
23 res2 = pnum2(999)
24 
25 
26 print(res1, res2)
View 6
 1 def getzsq(char):
 2     def zsq(func):
 3         def inner():
 4             print(char * 30)
 5             func()
 6 
 7         return inner
 8     return zsq
 9 
10 
11 
12 
13 # def zsqe(func):
14 #     def inner():
15 #         print("=" * 30)
16 #         func()
17 #     return inner
18 #
19 # def zsqs(func):
20 #     def inner():
21 #         print("*" * 30)
22 #         func()
23 #     return inner
24 
25 @getzsq("*") # f1 = zsq(f1)
26 def f1():
27     print("666")
28 
29 
30 f1()
View 7

 

posted @ 2018-08-09 10:00  goodyoung  阅读(155)  评论(0编辑  收藏  举报