Python_装饰器
Posted py-raid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python_装饰器相关的知识,希望对你有一定的参考价值。
Teacher say : 没有任何一家专面python的公司会不提装饰器的
os模块:和操作系统做交互的时候
#装饰器形成的过程
#装饰器的作用
#原则: 开发封闭原则
#装饰器的固定模式
import time
time.sleep(5) #让程序在执行到这个位置的时候停一会
time.time() #记录从190年开始到现在 过了多少秒
什么是装饰器?
在不修改函数调用方式的情况下, 但是还想在原来的函数前后添加功能
timer就是一个装饰器函数,只是对一个函数有一些装饰功能
例:
def timer(f) : #是一个装饰器函数
def inner(*args,**kwargs) : #*args 传进去的是一个元组,传进去一个动态参数 (*args,**kwargs)可以覆盖所有的动态参数类型
start = time.time()
f(*args,**kwargs) #被装饰的函数
end = time.time()
print( end - start)
return inner
@timer #语法糖 @装饰器函数名, 定义在被装饰函数的上一行
def func() : #被装饰的函数
time.sleep(0.01)
print(‘装饰器学习‘)
# func = timer(func) #加入语法糖@timer 此句则省略
func()
#原则: 开放封闭原则
# 开放:对扩展是开放的
# 封闭:对修改是封闭的
# 封版
被装饰函数的返回值问题:
因为被装饰函数的 @timer(语法糖),因而被修饰函数地址改变,所以被修饰函数的返回值拿不到,需要在装饰器最后return 被修饰函数
被装饰函数传参问题 : 需要用装饰带参数函数的装饰器
、
总结:装饰器的固定模式
def wrapper(f) :
def inner(*args,**kwargs) :
#在被装饰函数之前要做的事
ret = f(*args,**kwargs)
#在被装饰函数之后要做的事情
return ret
return inner
以上是关于Python_装饰器的主要内容,如果未能解决你的问题,请参考以下文章
Python-23_装饰器-04_练习---无参装饰器有参装饰器