装饰器带参数
不用裝飾器調用函數。
user_status = Falsedef login(auther_type): #auther_type接收參數qq,wxdef outer(func): #func接收參數hanshuhenan作為參數。def inner(*args, **kwargs): #非固定參數,接收模塊里傳遞的任意數量參數。user = "alex"password = "123"global user_statusif not user_status:user = input("用戶名:")password = input("密碼:")if user == "alex"and password == "123":print("歡迎登陸")user_status = Trueelse:print("您輸入的密碼錯誤,請重新輸入")if user_status:func(*args,**kwargs)return innerreturn outerdef 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 = Falsedef login(auther_type): #auther_type接收參數qq,wxdef outer(func): #func接收參數hanshuhenan作為參數。def inner(*args, **kwargs): #非固定參數,接收模塊里傳遞的任意數量參數。user = "alex"password = "123"global user_statusif not user_status:user = input("用戶名:")password = input("密碼:")if user == "alex"and password == "123":print("歡迎登陸")user_status = Trueelse:print("您輸入的密碼錯誤,請重新輸入")if user_status:func(*args,**kwargs) return innerreturn outerdef 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")
轉載于:https://www.cnblogs.com/Roc-Atlantis/p/8624443.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結