函数装饰器
16lz
2021-04-02
装饰器又称语法糖,以下代码是装饰器没有简写之前:
# __*__ 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博客作者天天打老虎的原创作品,如需转载,请注明出处,否则将追究法律责任
更多相关文章
- 嵌套函数和作用域和匿名函数
- js第一课 引入方式 参数 函数
- Python数据分析相关面试题!Python学习教程
- 虚函数的内部实现
- js引入方式、变量与常量的声明与使用方式、函数与高阶函数,实例演
- 调用函数以及常用模块
- 20210104 递归
- 20210108 装饰器详解
- 20210111 装饰器之案例剖析