码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2020-06-21 00:30:45      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:log   japan   turn   没有   code   原理   nbsp   col   put   

‘‘‘装饰器前奏‘‘‘

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的内存地址

技术图片

 

装饰器

标签:log   japan   turn   没有   code   原理   nbsp   col   put   

原文地址:https://www.cnblogs.com/xiaozeng6/p/13170788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!