Python 初始—(装饰器)

本质上也是函数的另一种表现形式,为其它函数丰富其功能,装饰其他函数,附加功能

在不改变被装饰的函数的源代码,而且不改变被装饰的函数的调用方式,因此被装饰的函数感知不到装饰器函数的存在

分解装饰器

  • 函数即变量
  • 高阶函数
  • 嵌套函数

函數从上往下依次执行,函数会在内存中创建,当函数未创建,当引用时,在内存中找不到,会出错!!

其中这个函数被引用时,则也是引用这个函数在内存中的空间,于是会出现引用计数

 

高阶函数

     把一个函数当成实参传给另一个函数(在不改变被修饰函数的源代码的情况下为被装饰的函数添加新的功能)

     返回值中包含函数名,可以对返回值中的函数的内存地址进行引用进一步对被修饰的函数进行装饰(同时也是不改变被装饰的函数代码的情况下)

 嵌套函数

函数即变量,在函数内中定义一个函数,用def去声明一个函数,嵌套函数的作用域只能在函数内,相当于函数内的局部变量

下面实现一个用装饰器模拟的一个网站安全认证的小例如下:

 1 user, passwd = 'jim', '123456'
 2 
 3 
 4 def auth(auth_type):
 5     def dif_auth(func):
 6         def wrapper(*args, **kwargs):
 7             if auth_type == "local":
 8                 user_name = input("请输入用户名").strip()
 9                 pwd = input("请输入密码").strip()
10                 if user_name == user and pwd == passwd:
11                     print("\033[32;1m登录成功 \033[0m")
12                     return func(*args, **kwargs)  # 返回值
13                 else:
14                     exit("\033[31;1m用户名 or 密码输入有误 \033[0m")
15             elif auth_type == "internet":
16                 pass
17 
18         return wrapper;
19 
20     return dif_auth
21 
22 
23 @auth(auth_type="local")
24 def index():
25     print("这是网站主页")
26 
27 
28 @auth(auth_type="internet")
29 def detail():
30     print("网站详情页")
31 
32 index()
33 detail()

 

转载于:https://www.cnblogs.com/fuGuy/p/7954679.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值