装饰器
Posted xiaozeng6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。
‘‘‘装饰器前奏‘‘‘
account={
"is_authenticated":False ,
"username":"zxz",
"password":"zxz123456"
}
def login(func):
if account[‘is_authenticated‘] is False:
username=input("user:")
password=input("password:")
if username==account[‘username‘] and password==account["password"]:
print("welcome login....")
account["is_authenticated "]=True
func()#认证成功,执行工鞥函数
else:
print("wrong username or password")
else:
print("用户已登录,验证通过。。。")
func()#认证成功,执行功能函数
def home():
print("----首页-----")
def america():
print("----欧美专区---")
def japan():
print("----日本专区----")
home()#首页
america1=login(america)
print(america)#america 函数没有返回return 所以地址为空
# america1()#----america None
‘‘‘装饰器---嵌套函数‘‘‘
account={
"is_authenticated":False ,
"username":"zxz",
"password":"zxz123456"
}
def login(func):
def inner():
if account[‘is_authenticated‘] is False:
username=input("user:")
password=input("password:")
if username==account[‘username‘] and password==account["password"]:
print("welcome login....")
account["is_authenticated "]=True
func()#认证成功,执行工鞥函数
else:
print("wrong username or password")
else:
print("用户已登录,验证通过。。。")
func()#认证成功,执行功能函数
return inner#返回内部函数名,形成闭包
def home():
print("----首页-----")
def america():
print("----欧美专区---")
def japan():
print("----日本专区----")
# home()#首页
# america=login(america)#inner的内存地址
# print(america)#
# america()#inner(),先拿到inner函数的地址,然后地址()执行函数
home()#首页
america1=login(america)#返回inner地址
print(america)#america 函数没有返回return 所以地址为空
# america()
america1()#执行inner()函数
‘‘‘装饰器---原理‘‘‘ account={ "is_authenticated":False , "username":"zxz", "password":"zxz123456" } def login(func): def inner(): if account[‘is_authenticated‘] is False: username=input("user:") password=input("password:") if username==account[‘username‘] and password==account["password"]: print("welcome login....") account["is_authenticated "]=True func()#认证成功,执行工鞥函数 else: print("wrong username or password") else: print("用户已登录,验证通过。。。") func()#认证成功,执行功能函数 return inner#返回内部函数名,形成闭包 def home(): print("----首页-----") @login def america(): print("----欧美专区---") def japan(): print("----日本专区----") # home()#首页 america()#inner(),先拿到inner函数的地址,然后地址()执行函数 ‘‘‘函数定义前加上@login 效果等同于 func=login(func)‘‘‘ # america=login(america)#inner的内存地址 # print(america)#inner的内存地址
以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章