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, 直接在功能函数里面, 去修改, 方便代码的重用
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, 直接在功能函数里面, 去修改, 方便代码的重用
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()
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()
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)
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)
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()