开始第二模块的学习:
装饰器 :
描述:
装饰器原则:
1、不能修改被装饰的函数的源代码
2、不能修改装饰的函数的调用方试
实现装饰器的需要:
高阶函数+嵌套函数=装饰器
高阶函数:
类型I:将函数做为实参的函数,可以称为高阶函数
1 def fun_1(fun_2):#fun_1 为高阶函数 2 print(‘1‘) 3 fun_2() 4 5 def fun_2(): 6 print(‘2‘) 7 8 fun_1(fun_2)
类型II:返回值中包含函数名的函数,也可以称为高阶函数
def fun_3(fun):#fun_3 为高阶函数 print(‘3‘) return fun def fun_4(): print(‘4‘) #fun_3(fun_4)()#返回值可以直接运行 fun=fun_3(fun_4)#可以将返回值赋于一个变量 fun()#可以调用函数
嵌套函数:
在函数中定义一个新函数,这个函数称为嵌套函数
1 def fun_5():#fun_5 为嵌套函数 2 print(‘5‘) 3 def fun_5_1(): 4 print(‘5.1‘) 5 6 fun_5()
最简单的装饰:
1 def fun_2(fun):#传入fun_1的函数 2 def function(): 3 4 fun() 5 print(‘in the fun_2......‘)#增加新的内容 6 7 return function 8 9 @fun_2#装饰fun_! 相当于fun_1=fun_2(fun_1) 10 def fun_1(): 11 print("in the fun_1....") 12 13 14 fun_1()
装饰器: 模拟登陆认证
1 #模拟网站登陆访问认证 2 # 3 name=‘abc‘ 4 password=‘123‘ 5 def certi(model):#装饰器 6 def outr(fun):#装饰器加参数需要多加一层嵌套 7 def login(*args,**kwargs):#为了兼容各类函数参数,添加 *args,**kwargs 不固定参数 8 if model==‘password‘: 9 print(‘这是password认证‘) 10 user_name = input(‘用户名:‘).strip() 11 paswd=input(‘密码:‘).strip() 12 if user_name==name and paswd==password: 13 print(‘通过认证‘) 14 return fun(*args,**kwargs) 15 else: 16 print(‘用户或密码错误 ,退出‘) 17 exit() 18 elif model==‘lamp‘: 19 print(‘这是lamp认证‘) 20 return fun(*args,**kwargs) 21 else: 22 print(‘认证出错‘) 23 return login 24 return outr 25 26 27 def indxe(): 28 print(‘欢迎进入首页‘) 29 30 @certi(model=‘password‘) 31 def user(): 32 print(‘欢迎进入用户页面:‘) 33 34 @certi(model=‘lamp‘) 35 def bbs(name): 36 print(‘欢迎%s登陆论坛!!‘%name) 37 38 indxe() 39 user() 40 bbs(name=‘yjj‘)
时间: 2024-10-12 21:23:30