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

# __*__ 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博客作者天天打老虎的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 嵌套函数和作用域和匿名函数
  2. js第一课 引入方式 参数 函数
  3. Python数据分析相关面试题!Python学习教程
  4. 虚函数的内部实现
  5. js引入方式、变量与常量的声明与使用方式、函数与高阶函数,实例演
  6. 调用函数以及常用模块
  7. 20210104 递归
  8. 20210108 装饰器详解
  9. 20210111 装饰器之案例剖析

随机推荐

  1. 如何对继承对象进行单元测试?
  2. 显示长期运行的PHP脚本的进展。
  3. 如何将PHP数组的关联数组转移到javascrip
  4. 具有线程/回复的私人消息系统
  5. PHP:在类中使用数据库
  6. laravel 框架自带表单验证
  7. php static静态变量及方法详解
  8. 为什么要使用PHP框架?
  9. 通过添加3hrs从服务器中重新获取CURTIME()
  10. laravel 4路由::控制器()方法返回NotFoun