一、装饰器函数的作用是什么

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

  对于搞python开发的人来说,函数占据了至关重要的地位。都说学好函数你就可以去找工作了,好了,假如你已经在某个公司上班了,想到马上就要过年了,那过年就意味着你可以向老板要年终奖金了,那凭什么老板要给你年终奖呢,你又能得到多少年终奖金呢。老板是这样说的,你给我至少写1000行代码,我来看一下你代码的执行时间,根据你的执行时间来评你的年终奖。好了,你知道既然要计算时间,学过函数的你就来实现一个计算函数执行时间的函数呗。聪明的你是这样的。

 import time

 def qqxing():
start = time.time()
print('老板好,同事好,大家新年好')
end = time.time()
elapsed_time = (end - start)
print(elapsed_time) qqxing() #运行结果:老板好,同事好,大家新年好
# 0.0

计算函数的执行时间

  实现了计算时间的函数,可是你发现了执行时间为0,因为你写得函数太厉害了,但如果是的话怕吓到老板,所以你这样搞。

 import time

 def qqxing():
start = time.time()
time.sleep(0.1)
print('老板好,同事好,大家新年好')
end = time.time()
elapsed_time = (end - start)
print(elapsed_time) qqxing() #运行结果:老板好,同事好,大家新年好
# 0.10044193267822266

计算函数的执行时间

  ok,虽然实现了,但是你写了500个函数,你难道要每个函数都加上计算时间的函数吗?能不能这样搞?

 import time

 def timmer(func):
start = time.time()
func()
end = time.time()
print(end - start) def func1():
print('func1 over') def func2():
print('func2 over') timmer(func1)
timmer(func2)

计算多个函数的执行时间

  这样是不是好多了,基本可以实现,但你会发现实际上当我调用func()函数时,调用方式改变了,由原来的func()变成timmer(func)了,那能不能不改变原函数的调用方式呢?可不可以这样。

 import time

 def timmer(func):
start = time.time()
func()
end = time.time()
print(end - start) def func():
print('func over')
func = timmer
timmer()

不改变函数调用方式

  这样就完美了,可惜我太天真,当执行函数时会报错,因为timmer(func)要传一个值,而你明目张胆的就给python解释器来一个func = timmer,这哪行!而我们在用函数作为变量赋值的时候是没法传参数的。所以你没法了。至此你得出了一个结论:年终奖与我无缘!

python学习——装饰器函数的更多相关文章

  1. Python学习---装饰器/迭代器/生成器的学习【all】

    Python学习---装饰器的学习1210 Python学习---生成器的学习1210 Python学习---迭代器学习1210

  2. Python学习---装饰器的学习1210

    装饰器的基础 学习前提: 作用域 + 函数的理解 + 闭包  [学习,理解] 代码编写原则: 对修改开放对扩展开放 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前 ...

  3. day12 python学习 装饰器

    闭包函数: 内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数#函数内部定义的函数称为内部函数 闭包函数获取网络应用 from urllib.request import url ...

  4. python学习---装饰器

    什么是装饰器 器即函数 装饰即修饰,意指为其他函数添加新功能 装饰器定义:本质就是函数,功能是为其他函数添加新功能 装饰器需要遵循的原则 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰函数 ...

  5. python之装饰器函数

    本章内容 引入 装饰器的形成过程 开放封闭原则 谈装饰器主要功能和装饰器固定结构 带参数的装饰器 多个装饰器装饰一个函数 引入 作为一个会写函数的python开发,我们从今天开始要去公司上班了.写了一 ...

  6. python递归,装饰器,函数, 高阶函数

    在函数内部,可以调用其它函数,如果一个函数在内部调用自身本身,这个函数就是递归函数 递归特性:1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模比上次递归都有所减少(10-8-5等) ...

  7. Python学习——装饰器/decorator/语法糖

    装饰器 定义:本质是函数,为其他函数添加附加的功能. 原则:1.不能修改原函数的源代码 2.不能修改被原函数的调用方式 重点理解: 1.函数即“变量” 2.高阶函数:返回值中包含函数名 3.嵌套函数 ...

  8. python之装饰器(函数)

    1. 装饰器 遵循的原则: 开闭原则:   对功能的扩展开放 对代码的修改是封闭 # 通用装饰器写法 # 存在的意义: 在不破坏原有函数和原有函数调用的基础上,给函数添加新的功能. def wrapp ...

  9. 【Python】装饰器实现日志记录

    好的日志对一个软件的重要性是显而易见的.如果函数的入口都要写一行代码来记录日志,这种方式实在是太低效了,但一直没有找到更好的方法.后来用python写一些软件,了解到python的装饰器功能时,突然人 ...

随机推荐

  1. Flask入门 表单Flask-wtf form原生 Bootstrap渲染(七)

    (1) 原生的表单 模板页面,form表单form.html <form action="{{ url_for('/check/') }}" method='post'> ...

  2. ZHS16GBK编码中汉字缺失

    生产中使用ZHS16GBK编码的Oracle数据库,若出现字,则会出现乱码 原因是此字不存在在ZHS16GBK编码中 解决方法可以:此二字结构相同,但是后面的在ZHS16GBK编码中出现

  3. 关于simotion建立同步/解除同步的问题

    关于simotion建立同步/解除同步的问题. 问题: [enable gearing][disable gearing][enable camming][disable camming]都是一个过程 ...

  4. python 正则表达式 re(邮箱匹配为例)

    import rere.match(pat,string)re.compile()re.sub(pat,repl,string)re.findall(pat,text)一般字符:. 匹配任意除换行符& ...

  5. ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件

    当出现访问类的函数或者需要确定类大小的时候,才需要用头文件(使用其类定义)    http://blog.csdn.net/clever101/article/details/4751717 看到这个 ...

  6. codis学习

    一.codis-proxy 结构 1.Topology 2.Slots 3.ServerGroup 4.Server   二.codis-proxy 启动过程   1.初始化ProxyInfo Id ...

  7. 用ant打包apkbuilder找不到了的解决办法

    apkbuilder的情况下生成apk文件,其实apkbuilder是一个批处理文件,打开里面就能发现,其实他内部执行的是sdklib.jar里面的一个class,所以就知道怎么做了,很简单,我们自己 ...

  8. 创建git项目的feature分支以及下载特定分支的仓库代码

    在掌握了基础git的使用后可以按照这个步骤来: 下载项目:git clone <仓库地址>如果要下载非master的某分支代码:git clone -b <分支名> <仓 ...

  9. JSON、JSONP、XML的区别

    这两天看jquery手册的时候看到了jsonp.发现手册把jsonp与json放在一起讲解了,所以想写篇文章 梳理一下这三者的关系. jsonp: jsonp是json的一种“使用模式”,可以让网页从 ...

  10. ubuntu14.04下搜狗拼音输入法不正常的解决方法

    在终端输入ibus-daemon –drx命令,可以解决该问题.