装饰器带参数
不用装饰器调用函数。
user_status = False def login(auther_type): #auther_type接收参数qq,wx def outer(func): #func接收参数hanshuhenan作为参数。 def inner(*args, **kwargs): #非固定参数,接收模块里传递的任意数量参数。 user = "alex" password = "123" global user_status if not user_status: user = input("用户名:") password = input("密码:") if user == "alex"and password == "123": print("欢迎登陆") user_status = True else: print("您输入的密码错误,请重新输入") if user_status: func(*args,**kwargs) return inner return outer def home(): print("----主页----") def america(): print("----欧美专区----") # @login("qq") def japan(uy,ty): print("----日本专区----", ty) # @login("wx") #login("wx) 返回的是outer,outer自动接收henan,返回inner,inner执行内部函数。 def henan(arg,args,rag): print("----河南专区----", arg, rag) xx = login("qq") henan = xx(henan) henan("movie", "movies", "uiyr") japan("yti", "ruir")
用有带参数的装饰器(装饰器带参数需要用嵌套函数不断返回内层函数的地址。不带函数的装饰器直接调用下面的函数名作为参数)
user_status = False def login(auther_type): #auther_type接收参数qq,wx def outer(func): #func接收参数hanshuhenan作为参数。 def inner(*args, **kwargs): #非固定参数,接收模块里传递的任意数量参数。 user = "alex" password = "123" global user_status if not user_status: user = input("用户名:") password = input("密码:") if user == "alex"and password == "123": print("欢迎登陆") user_status = True else: print("您输入的密码错误,请重新输入") if user_status: func(*args,**kwargs) return inner return outer def home(): print("----主页----") def america(): print("----欧美专区----") @login("qq") def japan(uy,ty): print("----日本专区----", ty) @login("wx") #login("wx) 返回的是outer,outer自动接收henan,返回inner,inner执行内部函数。即login("qq")(henan)(*args,**kwargs) def henan(arg,args,rag): print("----河南专区----", arg, rag) henan("movie", "movies", "uiyr") japan("yti", "ruir")
越是困难的事越要立即去做,这样收益才会最大!!!