python中什么是装饰器_Python中的装饰器的初步理解

什么是装饰器?

装饰器的本质是一个函数,其作用是用来装饰其他的函数,给其他函数附加行的功能。

原则:

1.不能修改被装饰函数的源码。

2.不能改变被装饰函数的调用方式。

那么什么是函数?

简单的来说:将一段代码逻辑,通过特殊的语法组织起来,可有参数,可有返回值,能够在

别的地方被调用。python中函数是可以有参数也可以没有参数,可以有返回值,也可以没有。默认返回None.

理解下面三句话:

1.函数也是可以是变量

函数也可以作为参数,函数也可以作为返回值

2.高阶函数

以函数作为参数,作者返回值是函数的函数

3.函数嵌套

函数里面定义函数

装饰器 = 高阶函数 + 函数嵌套

装饰器的应用场景:插入日志,性能测试,处理事物,权限验证等

现在有一个需要,测试一个函数的运行时间

#!/user/bin/env python3

# -*- coding:utf-8 -*-

import time

def my_time(func):

def wrapper(*args, **kwargs):

start_time = time.time()

ret = func(*args, **kwargs)

end_time = time.time()

print("{}函数运行了{}秒".format(func.__name__, (end_time - start_time)))

return ret

return wrapper # 注意不能是wrapp()

@my_time # 相当于f=my_time(f(x,y))

def f(x, y):

ret = x + y

print("helle world")

time.sleep(2)

return ret

print(f(3, 4))

代参数的装饰器

#!/user/bin/env python3

# -*- coding:utf-8 -*-

def logging(level):

def wrapper(func):

def inner_wrapper(*args, **kwargs):

print("[{level}]: enter function {func}()".format(

level=level,

func=func.__name__))

return func(*args, **kwargs)

return inner_wrapper

return wrapper

@logging(level='INFO')

def say(something):

print("say {}!".format(something))

# 如果没有使用@语法,等同于

# say = logging(level='INFO')(say)

if __name__ == '__main__':

say('hello')

下面是一个日志的装饰器

def log(func):

def wrapper(*args, **kwargs):

print("begin call{}".format(func.__name__))

temp = func(*args, **kwargs)

print("after call %s" % func.__name__)

return temp

return wrapper

刚刚开始入门,未在实际工厂环境中实际运用。后面还有类装饰器,内置的装饰器等,还有就是装饰器中的坑和优化,在实际过程中遇到再说,先入门。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值