什么是装饰器?

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

原则:

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

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

Python中的装饰器的初步理解的更多相关文章

  1. 简单说明Python中的装饰器的用法

    简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下   装饰器对与 ...

  2. python中@property装饰器的使用

    目录 python中@property装饰器的使用 1.引出问题 2.初步改善 3.使用@property 4.解析@property 5.总结 python中@property装饰器的使用 1.引出 ...

  3. 【Python】python中的装饰器——@

    对装饰器本来就一知半解的,今天终于弄清楚了,Python中的装饰器是对装饰者模式的很好运用,简化到骨子里了. python中为什么需要装饰器,看这里:http://www.cnblogs.com/hu ...

  4. Python 中实现装饰器时使用 @functools.wraps 的理由

    Python 中使用装饰器对在运行期对函数进行一些外部功能的扩展.但是在使用过程中,由于装饰器的加入导致解释器认为函数本身发生了改变,在某些情况下——比如测试时——会导致一些问题.Python 通过  ...

  5. 写python中的装饰器

    python中的装饰器主要用于在已有函数实现功能前附加需要输出的信息,下面将用实例展示我如何写装饰器. 首先分别尝试写装饰器装饰一个无参函数和一个有参函数(被装饰函数仅输出,无返回值情况下) def ...

  6. python中的装饰器decorator

    python中的装饰器 装饰器是为了解决以下描述的问题而产生的方法 我们在已有的函数代码的基础上,想要动态的为这个函数增加功能而又不改变原函数的代码 例如有三个函数: def f1(x): retur ...

  7. Python 中的装饰器

    说到装饰器是我们每个学Python人中的心痛. 装饰器作用:是用来装饰其他函数的,为其他函数添加新功能. 原则:1.不能改变被修饰函数的源代码. 2.不能修改被修饰函数的调用方式. 学装饰器前还需要了 ...

  8. 浅显易懂的谈一谈python中的装饰器!!

    hello大家好~~我是稀里糊涂林老冷,一天天稀里糊涂的. 前一段时间学习了装饰器,觉着这东西好高大上哇靠!!哈哈,一定要总结一下,方便以后自己查阅,也希望帮助其他伙伴们共同进步! 装饰器: 大家可以 ...

  9. 【Python】解析Python中的装饰器

    python中的函数也是对象,函数可以被当作变量传递. 装饰器在python中功能非常强大,装饰器允许对原有函数行为进行扩展,而不用硬编码的方式,它提供了一种面向切面的访问方式. 装饰器 一个普通的装 ...

随机推荐

  1. windows10 激活方法

    1.“以管理员身份”运行 依次输出以下命令: slmgr.vbs /upk 2. 接着输入以下命令: slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 3. 继续输入以 ...

  2. AOP的本质

    AOP的本质是HOOK: HOOK的本质是:新函数包含原函数或新函数替换原函数: 需要解决的问题: 1.新函数的生成: 2.新函数的调用机制: 3.原函数的调用机制: 新函数的生成: 1.将已有的动态 ...

  3. c# 匿名函数与托付

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/han_yankun2009/article/details/26290779    在 2.0之前的 ...

  4. BZOJ2425:[HAOI2010]计数(数位DP)

    Description 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1 ...

  5. 20145203盖泽双 《Java程序设计》第8周学习总结

    20145203盖泽双 <Java程序设计>第8周学习总结 教材学习内容总结 1.java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger类,Logge ...

  6. Alias自定义命令

    [root@localhost etc]# type home    --检查是否占用-bash: type: home: not found[root@localhost etc]# alias h ...

  7. mysql 二进制日志binary log操作简单命令

    show master status \G; #查看当前正在记录的二进制日志 show binary logs; #查看binary log 所有文件列表 show binlog events; #查 ...

  8. nginx 查看版本 查看模块

    如图,简单说 大V看模块,小v看版本. nginx -v //查看版本号 nginx -V //查看版本号和加载模块明细

  9. python-文件基本操作(一) (转载)

    转载自: https://www.cnblogs.com/nizhihong/p/6528439.html 一.打开文件的方法: 注意:file()和open()基本相同,且最后要用close()关闭 ...

  10. centos下Zabbix Agent端部署和安装

    首先重复一下前面的规划 server端:  192.168.136.144    centos6.5 (虚拟机) agent端:    192.168.136.155    centos6.5( 虚拟 ...