加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

day 12 python的装饰器

发布时间:2020-12-20 10:46:31 所属栏目:Python 来源:网络整理
导读:1·装饰器 ①装饰器的作用:在不改变函数的基础上,在函数的前后添加新的功能 ②使用原则:开放封闭原则(开放:对扩展时开放的;封闭:对修改是封闭的) 2·语法糖:@装饰函数 3·本节涉及的库:time? ?(import time) print(time.tim())#获取当前时间 pri

1·装饰器

①装饰器的作用:在不改变函数的基础上,在函数的前后添加新的功能

②使用原则:开放封闭原则(开放:对扩展时开放的;封闭:对修改是封闭的)

2·语法糖:@装饰函数

3·本节涉及的库:time? ?(import time)

print(time.tim())#获取当前时间

print(time.sleep(时间间隔))? #让程序在执行到这里的时候停一会儿s

装饰器的固定模式:

例:

import time

def timmer(f):? ? ?#装饰器函数?,f为被装饰函数

  def inner( ):

    start = time.time()

    ret = f( )

    end = time.time()

    return ret

  return inner

@timmer    #语法糖,装饰器函数的调用方法? ?func= timmer(func)-->inner

def func():    #被装饰函数

  time.sleep(0.1)

  print(‘博主真帅!‘)

  return ‘无与伦比‘?

带有参数的装饰器函数:

import time

def timmer(f):? ? ?#装饰器函数

  def inner(*args,**kwargs):

    start = time.time()

    ret = f(*args,**kwargs)

    end = time.time()

    return ret

  return inner

@timmer    #语法糖,装饰器函数的调用方法? ?func= timmer(func)-->inner

def func(a,b):    #被装饰函数

  time.sleep(0.1)

  print(‘博主真帅!‘)

  return ‘无与伦比‘?

需要理解装饰函数的在程序中的执行顺序:

装饰器的进阶:(函数的停止调用,及三层函数)

当存在多个参数时,500个函数的时候,如何停止函数的调用

import time

flage = True

def wrapper(flage):

 def timmer(f):

  def inner(*args,**kwargs):

   if flage:

    start =time.time()

    ret? = f(*args,**kwargs)

    end = time.time()

    print(end-start)

    return ret

   else:

    ret = f(*args,**kwargs)

    print(‘函数在这里:’)

  return inner

 return timmer 

@wrapper(flage)? ? ?#相当于wrapper(flage) = timmer,先执行wrapper(),再调用函数timmer

def func(a.c):
  rtime.sleep(0.3)

  print(‘11‘)

func(1,2)

多个函数装十一个函数:

def wrapper1(f):#f =func

  def inner1():

    print(‘wrapper1 after om func‘)

    ret = f()

    print(‘wrapper1 after om func‘)

    return inner1

def wrapper2(f): #f=inner1

  def inner2():

    print(‘wrapper2 after om func‘)

    ret = f()

    print(‘wrapper2 after om func‘)

    return inner2

def wrapper3(f): #f =inenr2

  def inner3():

    print(‘wrapper3 after om func‘)

    ret = f()

    print(‘wrapper3 after om func‘)

    return inner3

@wrapper3? #func =wrapper3(func)=wrappr3(func) = inner3

@wrapper2 #func =wrapper2(func)= wrapper2(inner1) = inner2

@wrapper1 #func = wrapper1(func)-->inner1

#三个装饰器的使用顺序,先执行最接近被装饰的那个装饰器

def func():
  print(‘niubi‘)

func()? #-->inner3()-->inner2()-->inner1()

#应用:

可应用于记录用户的来访情况

计算这个函数的执行时间

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读