python基础 day15 装饰器

今日内容大纲

一、内容回顾作业讲解

1、匿名函数 一句话函数,多与内置函数,列表推导式结合

2、内置函数:min max sorted 、map reduce、bytes

3、闭包:

  • 一定是函数嵌套在函数中

  • 内层函数对外层函数的非全局变量的使用

  • 作用:保证数据安全,自由变量不会在内存中消失,而且全局引用不到

二、装饰器

1、开放封闭原则

  • 开放:对代码的拓展开放

  • 封闭:对源码的修改是封闭的

  • 在不改变原函数的代码及调用方式的前提下,为其增加新的功能

装饰器的本质就是闭包
"""
装饰器基本格式
"""
import time
def index():
   time.sleep(3)
   print("欢迎登录博客园首页!")
def func(f):
   def inner():
       start_time = time.time()
       f()
       end_time = time.time()
       print(f'测试效率时间差:{end_time-start_time}')
   return inner
index = func(index)  # func(index) 得到的是 inner
index()  

 

 

被装饰函数不带返回值

import time
def func(f):
  def inner():
      start_time = time.time()
      f()
      end_time = time.time()
      print(f'测试效率时间差:{end_time-start_time}')
  return inner
@func #等价于index = func(index)
def index():
  time.sleep(3)
  print("欢迎登录博客园首页!")
index()

 

 

 

被装饰器带返回值
import time
def func(f):
   def inner():
       start_time = time.time()
       r = f()
       end_time = time.time()
       print(f'测试效率时间差:{end_time-start_time}')
       return r
   return inner
@func  #等价于index = func(index)
def index():
   time.sleep(3)
   print("欢迎登录博客园首页!")
   return 666

ret = index()
print(ret)

1609225573225

被装饰器参数
import time
def func(f):
   def inner(*args,**kwargs):
       start_time = time.time()
       r = f(*args,**kwargs)
       end_time = time.time()
       print(f'测试效率时间差:{end_time-start_time}')
       return r
   return inner
@func  #等价于index = func(index)
def index(name):
   time.sleep(3)
   print(f"欢迎{name}登录博客园首页!")
   return 666
@func
def barry(name,age):
   time.sleep(3)
   print(f"欢迎{age}岁{name}登录博客园首页!")
   return 777
ret = index("憨子")
print(ret)
ret_1 = barry("宝气",12)
print(ret_1)

装饰器的标准格式

def  wrapper(f):
  def inner(*args,**kwargs):
      """添加额外的功能,执行被装饰函数之前的操作"""
      ret = f(*args,**kwargs)
      """添加额外的功能,执行被装饰函数之后的操作"""
      return ret
  return inner

 

posted @ 2020-12-29 20:35  小鱼鱼与黄黄  阅读(106)  评论(0编辑  收藏  举报