装饰器函数

装饰器的本质:一个闭包函数

装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

装饰器满足开放封闭原则:

  1,对扩展是开放的

  2,对修改是封闭的

装饰器的主要功能:

在不改变函数调用方式的基础上在函数的前、后添加功能。

装饰器的固定格式:

def timmer(func):
    def inner(*args,**kwargs):
        ‘‘‘添加函数调用之前的扩展代码‘‘‘
        ret = func(*args,**kwargs)
        ‘‘‘添加函数调用之后的扩展代码‘‘‘
        return ret
    return inner

带参装饰器

F =True
def outer(flag):
    def wrapper(func):
        def inner(*args,**kwargs):
            if flag:
                print(‘before‘)
                ret = func(*args,**kwargs)
                print(‘after‘)
            else:
                ret = func(*args, **kwargs)
            return ret
        return inner
    return wrapper

装饰器的应用

l = []
def wrapper(func):
    l.append(func)  #统计当前程序中有多少个函数被装饰了
    def inner(*args,**kwargs):
        #l.append(func)  #统计本次程序执行有多少个带这个装饰器的函数被调用了
        ret = func(*args,**kwargs)
        return ret
    return inner
时间: 2024-08-02 04:18:46

装饰器函数的相关文章

python全栈开发从入门到放弃之装饰器函数

1.函数名可以当作函数的参数 1 import time 2 def timmer(func): 3 #函数名可以当做函数的参数 4 def inner(): 5 start = time.time() 6 func() 7 end = time.time() 8 print(end - start) 9 return inner 10 11 def hahaha(): 12 time.sleep(0.1) 13 print('aaaa') 14 15 hahaha() 16 17 输出结果 1

函数(三) 装饰器函数

装饰器定义    装饰器其实也就是一个函数,一个用来包装函数的函数,返回一个修改之后的函数值,将新的值赋值原来的函数 2. 装饰器语法 1.函数名可以当作函数的参数 1 import time 2 def timmer(func): 3 #函数名可以当做函数的参数 4 def inner(): 5 start = time.time() 6 func() 7 end = time.time() 8 print(end - start) 9 return inner 10 11 def hahah

自己编写一个装饰器中的装饰器函数

看了"大道曙光"的<探究functools模块wraps装饰器的用途>的文章.基本上弄清了wraps的工作原理,为了检验一下自己理解的程度,于是动手写一个类似的 wraps函数,请大家指教. #!/usr/bin/env python # -*- coding: utf-8 -*- #filename : mywrapper.py #date: 2017-06-02 ''' wrapper function by my code.''' import functools i

property装饰器函数 @classmethod @staticmethod isinstance和issubclass

property函数   让方法伪装成属性   还有一系列的装饰器函数 1 class Goods: 2 __discount = 0.8 3 def __init__(self,price): 4 self.__price = price 5 self.name = 'apple' 6 7 @property #伪装成属性 8 def price(self): 9 return self.__price * Goods.__discount 10 11 @price.setter #修改折扣

property内置装饰器函数和@name.setter、@name.deleter

# property # 内置装饰器函数 只在面向对象中使用 # 装饰后效果:将类的方法伪装成属性 # 被property装饰后的方法,不能带除了self外的任何参数 from math import pi class Circle: def __init__(self, r): self.r = r def perimeter(self): return 2 * pi * self.r def area(self): return pi * self.r**2 * pi c1 = Circle

Python装饰器函数

装饰器函数 这里定义了一个func函数,打印'我是func函数' def func(): print('我是func函数'); time.sleep(1); 假设,想要在func()函数的基础之上新增的一个功能,计算func函数执行所用的时间 import time;#时间模块,处理时间操作 #开闭原则,对扩展开放,对修改封闭 def func(): print('我是func函数'); time.sleep(1);#休眠一秒 #tools方法就是func方法的装饰器 def tool(): d

python学习——装饰器函数

一.装饰器函数的作用是什么 答:装饰器函数是在不修改原函数及其调用方式的情况下对原函数功能进行扩展 对于搞python开发的人来说,函数占据了至关重要的地位.都说学好函数你就可以去找工作了,好了,假如你已经在某个公司上班了,想到马上就要过年了,那过年就意味着你可以向老板要年终奖金了,那凭什么老板要给你年终奖呢,你又能得到多少年终奖金呢.老板是这样说的,你给我至少写1000行代码,我来看一下你代码的执行时间,根据你的执行时间来评你的年终奖.好了,你知道既然要计算时间,学过函数的你就来实现一个计算函

装饰器函数(二)

装饰器进阶 1.带参数的装饰器就是在原有装饰器的基础上引入一个新的参数 多套一层函数,多传一个参数决定是否执行添加的功能,只是利用闭包多传了一个参数 和装饰器的原理一样,这次是把外界要传的参数通过在原有装饰器函数的基础上再套一层函数来实现的 现在装饰器函数最外层的作用只是在这个嵌套函数结构的空间里引入了一个新的局部变量,且变量的值由外部传入 此时多了一层函数嵌套,由于每一个函数名加上括号就是一层调用,因此要把@和@后面分开成两部分看,每一个函数名加上括号就是一层调用,因此要把@和@后面分开成两部

装饰器函数精讲

阅读目录 楔子 装饰器的形成过程 开放封闭原则 谈装饰器主要功能和装饰器固定结构 带参数的装饰器 多个装饰器装饰一个函数 举例函数 import time def timer(func): def inner(): start = time.time() func() print(time.time() - start) return inner @timer #==> func1 = timer(func1) def func1(): time.sleep(0.1) print('in fun

python之路--装饰器函数

(一)装饰器的形成过程 装饰器的本质是闭包函数的一种应用,装饰器是用来装饰函数的,在不修改原函数及其调用方式的情况下对原函数功能进行拓展. #简单的无参函数装饰器 import time def timmer(func): def inner(): start = time.time() func() end = time.time() print(end -start) return inner @timmer#语法糖 def hahaha(): time.sleep(2)#停止时间的一种用法