十二、装饰器进阶

简介: 执行函数的时候* 打散 定义函数的时候* 聚合 from functools import wraps def wrapper(f): # f = func1 @wraps(f) def inner(*args,**kwargs): #聚合 ...

执行函数的时候* 打散

定义函数的时候* 聚合

 
 
from functools import wraps
def wrapper(f):  # f = func1
    @wraps(f)
    def inner(*args,**kwargs): #聚合
        #args (1,2,3)
        '''执行函数之前的相关操作'''
        ret = f(*args,**kwargs)  # 打散 1,2,3
        '''执行函数之后的相关操作'''
        return ret
    return inner
# 函数的执行时,*打散。
# 函数的定义时,*聚合。
@wrapper  # func1 = wrapper(func1)  func1 = inner
def func1(*args): #args (1,2,3)
    print(666)
    return args
print(func1(*[1,2,3]))  # inner(1,3,5) 打散

打印函数有用信息
@wrapper
def func1():
"""
此函数是完成登陆的功能,参数分别是...作用。
:return: 返回值是登陆成功与否(True,False)
"""
print(666)
return True
func1()
print(func1.__name__)
print(func1.__doc__)

#666
 func1

 此函数是完成登陆的功能,参数分别是...作用。
: return: 返回值是登陆成功与否(True,False)

带参数的装饰器

 
  
import time
def timmer(*args,**kwargs):
def wrapper(f):
def inner(*args,**kwargs):
if flag:
start_time = time.time()
ret = f(*args,**kwargs)
time.sleep(0.3)
end_time = time.time()
print('此函数的执行效率%f' % (end_time-start_time))
else:
ret = f(*args, **kwargs)
return ret
return inner
return wrapper

flag = False
@timmer(flag,2,3) # 两步:1,timmer(flag) --> wrapper 2,@wrapper 装饰器
def func1():
print(666)


@timmer(flag)
def func2():
print(777)
func1()
func2()
多个装饰器装饰一个函数
def wrapper1(func): f = func
    def inner1():
        print('wrapper1 ,before func')
        func()
        print('wrapper1 ,after func')
    return inner1

def wrapper2(func):  func = inner1
    def inner2():
        print('wrapper2 ,before func')
        func()
        print('wrapper2 ,after func')
    return inner2

@wrapper2   然后读@wrapper2   f = inner2   
@wrapper1   先读@wrapp1      f = inner1
def f():
    print('in f')

f()        再读f()
目录
相关文章
|
1月前
|
设计模式 缓存 Python
Python编程中的装饰器:从基础到高级应用
【10月更文挑战第7天】 本文深入探讨了Python中装饰器的使用,从基本概念到高级应用全面解析。通过具体示例,读者将能清晰理解装饰器的本质、实现方式及其在代码优化和功能增强中的重要作用。
14 0
|
3月前
|
设计模式 Python
深入浅出:Python编程中的装饰器
【8月更文挑战第29天】装饰器,在Python中是改变函数或类行为的一种高级工具。它们允许我们在不修改原始代码的情况下,增加额外的功能。本文将通过浅显易懂的语言和实例,带你了解装饰器的概念、用法及其背后的原理,让你能够轻松掌握这一强大的工具。
|
6月前
|
Java 容器
对于所有对象都通用的方法⭐良好习惯总结(避免踩坑)
对于所有对象都通用的方法⭐良好习惯总结(避免踩坑)
|
6月前
|
Python
Python编程中的装饰器应用探究
【2月更文挑战第8天】装饰器是Python编程中一个重要且强大的工具,它能够简洁地实现函数的包装和扩展,提高代码的复用性和可读性。本文将深入探讨装饰器在Python编程中的应用,结合实际例子详细讲解装饰器的定义、使用方法及常见应用场景,帮助读者更好地理解和运用装饰器这一高级特性。
函数进阶
函数根据 **有没有参数** 以及 **有没有返回值**,可以 **相互组合**,一共有 **4 种** 组合形式 1. 无参数,无返回值 2. 无参数,有返回值 3. 有参数,无返回值 4. 有参数,有返回值
|
Python 容器
吃透Python函数进阶嵌套等知识点
吃透Python函数进阶嵌套等知识点
105 0
|
开发者 Python
装饰器的基本使用|学习笔记
快速学习装饰器的基本使用
|
Python
【透彻】Python装饰器进阶(类装饰器+带参数的装饰器+多装饰器)| Python 主题月
【透彻】Python装饰器进阶(类装饰器+带参数的装饰器+多装饰器)| Python 主题月
164 0
优秀装饰器源码学习(二)
优秀装饰器源码学习(二)