装饰器:本质是个函数,主要功能给其他函数附加新的功能
1,给其他函数附加新的功能
2,在不修改其他函数的内部和不修改其调用方式前提下,给函数装饰新的功能
函数其实是个变量
装饰器有高阶函数和嵌套函数组成
高阶函数定义
1以函数名为实参给另一个函数作为传递变量
2,返回值包含函数名(其它是返回了一个函数的内存地址)
例子:
1 user_status= False 2 3 def login(*args,**kwargs): 4 # args 5 print(*args) 6 def out_wrapper(func): 7 def inner(*args,**kwargs): 8 user_name="yuan" 9 user_password="123456" 10 global user_status 11 # print(user_status) 12 if user_status==False : 13 _user_name=input("usename:") 14 _user_password=input("passwor:") 15 if user_name==_user_name and user_password==_user_password : 16 user_status=True 17 print("welcome login") 18 else: 19 print("usename or password is wrong") 20 if user_status==True: 21 ret=func(*args,**kwargs) 22 return ret 23 return inner 24 return out_wrapper 25 26 def home(): 27 print("主页") 28 29 @login("sd") 30 def henan(name): 31 print("河南",name) 32 @login() 33 def guangdong(): 34 print("广东") 35 36 37 ‘‘‘ 38 #hennan=login(hennan)这个打印出来的是内存地址====== 39 # print(hennan) 40 ‘‘‘ 41 42 henan("河南页面") 43 guangdong()