阅读 148

函数装饰器

装饰器又称语法糖,以下代码是装饰器没有简写之前:

# __*__ coding: utf-8 __*____author__ = "David.z"user_status = Falsedef login(func):def inner():#嵌套函数_username = "alex"  # 假装这个DB里存的用户信息_password = "abc123"  # 假装这是DB里存的用户密码global user_statusif user_status == False:
            username = input("user:").strip()
            password = input("password:").strip()if username == _username and password == _password:print("welcome login...")
                user_status = Trueelse:print("wrong username or password!")else:print("用户已登录,验证通过。。。")if user_status:
            func()return innerdef home():print("首页".center(15,"*"))def america():print("欧美专区".center(15, "*"))def japan():print("日韩专区".center(15,"*"))def henan():print("河南专区".center(15,"*"))
henan = login(henan) #innerprint(henan) #打印出来看看是不是内存地址henan() #加上()执行函数

 

以下代码是简写之后:

唯一区别就是在装饰的时候用@login

# __*__ coding: utf-8 __*____author__ = "David.z"user_status = Falsedef login(func):def inner():#嵌套函数_username = "alex"  # 假装这个DB里存的用户信息_password = "abc123"  # 假装这是DB里存的用户密码global user_statusif user_status == False:
            username = input("user:").strip()
            password = input("password:").strip()if username == _username and password == _password:print("welcome login...")
                user_status = Trueelse:print("wrong username or password!")else:print("用户已登录,验证通过。。。")if user_status:
            func()return innerdef home():print("首页".center(15,"*"))def america():print("欧美专区".center(15, "*"))def japan():print("日韩专区".center(15,"*"))
@logindef henan():print("河南专区".center(15,"*"))# henan = login(henan) #inner#
# print(henan) #打印出来看看是不是内存地址henan() #加上()执行函数

 

最后一点改变,现在是在调用函数里面加了参数调用,为了不影响其他函数的调用。需要在嵌套的函数里加入*args,**kwargs

 = = inner(*args,**kwargs):_username =   _password =    user_status === input(= input( username == _username  password ==(=((*args,**(.center(15,(.center(15, (.center(15,(.center(15,)%= login(henan) #japan =(henan) henan() japan()

 

 

两层嵌套函数,并带入参数的装饰器:

# __*__ coding: utf-8 __*____author__ = "David.z"user_status = Falsedef login(func2):def outer(func):def inner(*args, **kwargs):
            _username = "alex"  # 假装这个DB里存的用户信息_password = "abc123"  # 假装这是DB里存的用户密码global user_statusif user_status == False:
                username = input("user:").strip()
                password = input("password:").strip()if username == _username and password == _password:print("welcome login...")
                    user_status = Trueelse:print("wrong username or password!")else:print("用户已登录,验证通过。。。")if user_status:
                func(*args, **kwargs)return innerreturn outerdef home():print("首页".center(15,"*"))def america():print("欧美专区".center(15, "*"))
@login("weixin")def japan():print("日韩专区".center(15,"*"))
@login("qq")def henan(style):print("河南专区,---%s".center(15,"*")%style)

henan("3P")
japan()

 

©著作权归作者所有:来自51CTO博客作者天天打老虎的原创作品,如需转载,请注明出处,否则将追究法律责任


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐