day14

装饰器

装饰器本质就是闭包

开放封闭原则:

扩展是开放的(增加新功能),对源码是封闭的(修改已经实现的功能)

装饰器:用来装饰的工具

作用:在不改变源代码及调用方式的基础下额外增加新的功能

应用(面试的时候): 登录认证、日志

​ 增加一些功能

​ 校验用户登录的时候

​ 面向对象

语法糖 -- 甜:@+函数名

语法糖必须放在被装饰的函数正上方

# import time
# def times(f):
# def inner():
# start_time = time.time()
# f()
# print(time.time() - start_time)
# return inner
# def foo():
# time.sleep(1)
# print('我是立业,我快!')
# foo = times(foo)
# foo() # def wrapper(f):
# def inner(*args,**kwargs):
# f(*args,**kwargs)
# return inner
# def func(*args,**kwargs):
# print(f"这是{args,kwargs}函数")
# func = wrapper(func)
# func('alex','sir')
版一
# import time
# start_time = time.time()
# def func():
# time.sleep(1)
# print('我要飞')
# func()
# print(time.time() - start_time)
版二
# def times(f):
# start_time = time.time()
# f()
# print(time.time() - start_time)
#
# def foo():
# time.sleep(1)
# print('小明')
#
# def func():
# time.sleep(1)
# print('章超印')
# s = func
# func = times
# func(s) # s = foo
# foo = times
# foo(s)
版三
# def times(f):
# def inner():
# start_time = time.time()
# f()
# print(time.time() - start_time)
# return inner
#
# def foo():
# time.sleep(1)
# print('小明')
# foo = times(foo)
# foo() # def wrapper():
# def inner():
# print(1)
# return inner
# wrapper()() # def wrapper():
# def inner(f):
# print(f)
# return inner
#
# def func():
# print('小明')
# func = wrapper()
# func('alex')
版四
# def wrapper(f):
# def inner(*args,**kwargs):
# f(*args,**kwargs)
# return inner
# def func(*args,**kwargs):
# print(f'{args,kwargs}')
# func = wrapper(func)
# func(1,2,2,3,4,5,5,a=1,b=2) # import time
# def wrapper(f):
# def inner(*args,**kwargs):
# start_time = time.time()
# f(*args,**kwargs)
# print((time.time() - start_time))
# return inner
# def func(*args,**kwargs):
# print(f'{args,kwargs}')
# time.sleep(1)
# func = wrapper(func)
# func(1,2,3,4,54,5,a = 1, b =2)
版五
# import time
# def wrapper(f):
# def inner(*args,**kwargs):
# start_time = time.time()
# print(f(*args,**kwargs))
# return time.time() - start_time
# return inner
# @wrapper
# def func(*args,**kwargs):
# time.sleep(1)
# print(f'{args,kwargs}')
# return 'alex'
# @wrapper
# def foo(*args,**kwargs):
# time.sleep(1)
# print(f'{args,kwargs}')
# print(func(1,2,3,4,54,5,a = 1, b =2))
# print(foo(1523,2,541,5165,12,6,a='alex',b='eeeee'))
标准版
def func(a): #a是要被装饰的函数名
def foo(*args,**kwargs):
"装饰之前的操作"
ret = a(*args,**kwargs)
"装饰之后的操作"
return ret
return foo
@func
def f1(*args,**kwargs):
print(f"这是一个{args}")
return "我可以返回了"
print(f1(1,2,3,34,4,5,a=1))
博客园
# login_dic = {
# "username": None,
# "flag": False
# }
# def auth(f):
# def inner(*args,**kwargs):
# if login_dic["flag"]:
# return f()
# else:
# return login()
# return inner
# @auth
# def index():
# print(f"这是{login_dic['username']}主页")
# return "主页没有内容"
# def login():
# print("这是一个登录页面")
# user = input("username:")
# pwd = input("password:")
# if user == "baoyuan" and pwd == "baoyuan123":
# login_dic["flag"] = True
# login_dic["username"] = user
# return "登录成功!"
# else:
# return "用户名或密码错误!"
# @auth
# def comment():
# print(f"这是{login_dic['username']}评论")
#
# while not login_dic["flag"]:
# print(comment())

最新文章

  1. 从BSP模型到Apache Hama
  2. 原生js实现fadein 和 fadeout
  3. svn回滚版本
  4. Linux与Windows共享文件夹之samba的安装与使用(Ubuntu为例)
  5. Dell PowerVault TL4000 磁带机卡带问题
  6. Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界
  7. GGS: Sybase to Oracle
  8. POJ 1922
  9. android的R.java
  10. java堆栈
  11. 使用 JSONP 实现跨域通信
  12. tdx api z
  13. java直接输出Excel 页面实现下载
  14. 图片切割工具---产生多个div切割图片 采用for和一的二维阵列设置背景位置
  15. Windows 7的 磁盘管理中,某个磁盘或分区,突然变成只读。
  16. java去重(1通过迭代器,2直接赋值)
  17. 【CSS】 CSS的一些应用实例和参考
  18. AlwaysUp使用方法
  19. Python-常见面试题-持续更新
  20. int和intege相比

热门文章

  1. [RN] React Native 实现 类似京东 的 沉浸式状态栏和搜索栏
  2. Sherlock and His Girlfriend(信息学奥赛一本通 1623)
  3. python .socket 连接
  4. 洛谷P5171 Earthquake
  5. quick player运行分析
  6. Java如何获取当前类路径
  7. Git Bash设置代理
  8. Linux文件系统被占用,磁盘使用量与实际不一致【转】
  9. JPA连接PG数据库时间类型查询报错的修改
  10. Supervisor进程守护工具的使用