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

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

  对于搞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. 栈帧示意图:stack pointer、frame pointer

    更多参考:http://www.embeddedrelated.com/usenet/embedded/show/31646-1.php 一: The calling convention descr ...

  2. supersocket 通过配置文件启动服务 总是 初始化失败的 解决办法

    <serverTypes> <add name="APPServerType" type="TMPServer.APP.APPServer, TMPSe ...

  3. Dynamics CRM 之汇总字段

    用插件汇总数据,速度很慢,导数据的时候更慢!那就用汇总字段- - 新建个汇总字段,字段类型选择汇总.点击编辑进入逻辑编辑 相关实体:对当前实体或者相关联的实体的字段值进行判断筛选. 筛选器:对相关实体 ...

  4. linux下使用第三方商店安装应用

    安装 snap store 进行下载,相当与第三方应用商店,但是往往比某一个官方软件源里面的应用要丰富或更实用 到 snap docs 中选择你的 linux 版本进入安装文档,根据指示一步一步安装即 ...

  5. Oracle 11.1.0.6 导入导出bug

    实验环境: 11.1.0.6.0   对ANONYMOUSUSER_ALL表中分区进行备份 SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PA ...

  6. 字段处理rtrim去掉结尾的特殊字符和空格

    SQL> create table ycrtest2 (name varchar2(50)); Table created. SQL> insert into ycrtest2 value ...

  7. JavaScript工作机制:V8 引擎内部机制及如何编写优化代码的5个诀窍

    概述 JavaScript引擎是一个执行JavaScript代码的程序或解释器.JavaScript引擎可以被实现为标准解释器,或者实现为以某种形式将JavaScript编译为字节码的即时编译器. 下 ...

  8. 修改CPAN安装源

    更新CPAN镜像源的方法,以CentOS 6.5为例. 存储CPAN设置信息的文件路径为: /usr/share/perl/CPAN/Config.pm 使用vi打开文件 vi /usr/share/ ...

  9. 【转载】#457 Converting Between enums and their Underlying Type

    When you declare an enum, by default each enumerated value is represented internally with an int. (S ...

  10. 【转载】#438 - Benefits of Using Interfaces

    You might wonder why you'd define an interface, have a class implement that interface and then acces ...