Python 函数修饰符(装饰器)的使用

1.  修饰符的来源
修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。

修饰符是解决这类问题的绝佳设计,有了修饰符,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,修饰符的作用就是为已经存在的对象添加额外的功能。

如下:

  1. import time
  2. def
    timeslong(func):
  3. start = time.clock()
  4. print("It's time starting ! ")
  5. func()
  6. print("It's time ending ! ")
  7. end = time.clock()
  8. return "It's used : %s ." % (end - start).

上面的程序中,定义了一个函数,对另外一个对象的运行时间进行计算,如果采用通常的方式需要将 func() 重新在 timeslong 中重新写一遍。为了简化这种操作,便提出了修饰符的概念。

如下:

  1. import time
  2. def
    timeslong(func):
  3. def call():
  4. start = time.clock()
  5. print("It's time starting ! ")
  6. func()
  7. print("It's time ending ! ")
  8. end = time.clock()
  9. 10.   return "It's used : %s ." % (end -
    start)
  10. return call

13. @timeslong

14. def f():

  1. 15.  
      y = 0
  2. 16.  
      for i in range(10):
  3. 17.  
          y = y + i + 1
  4. 18.  
          print(y)
  5. 19.  
      return y

21. print(f())

这样出现便不用再函数内部再进行嵌入函数,通过 @timeslong 对其进行修饰达到目的,是整个代码美观,而且少些部分代码

修饰符也可以通过类来进行使用,共享该类,如下为一个实例:

  1. class
    timeslong(object):
  2. def
    __init__(self,func):
  3. self.f = func
  4. def
    __call__(self):
  5. start = time.clock()
  6. print("It's time starting ! ")
  7. self.f()
  8. print("It's time ending ! ")
  9. end = time.clock()
  10. return "It's used : %s ." % (end - start)

12. @timeslong

13. def f():

  1. 14.  
      y = 0
  2. 15.  
      for i in range(10):
  3. 16.  
          y = y + i + 1
  4. 17.  
          print(y)
  5. 18.  
      return y

20. print(f())

2.  Python内置的修饰符

内置的修饰符有三个,分别是 staticmethod、classmethod 和 property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。由于模块里可以定义函数,所以静态方法和类方法的用处并不是太多。

  1. class
    Hello(object):
  2. def __init__:
  3. ...
  4. @classmethod
  5. def
    print_hello(cls):
  6. print("Hello")

classmethod 修饰过后,print_hello() 就变成了类方法,可以直接通过 Hello.print_hello() 调用,而无需绑定实例对象了。

Python 函数修饰符(装饰器)的使用的更多相关文章

  1. python函数修饰符@的使用

    python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等. 创建函数修饰符的规则:(1)修饰符是一个函数(2)修饰符取被修饰函数为参数(3)修饰符返回一个新函数 ...

  2. Python函数篇:装饰器

    装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理. ...

  3. python函数与方法装饰器

    之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...

  4. python函数学习之装饰器

    装饰器 装饰器的本质是一个python函数,它的作用是在不对原函数做任何修改的同时,给函数添加一定的功能.装饰器的返回值也是一个函数对象. 分类: 1.不带参数的装饰器函数: def wrapper( ...

  5. python函数:叠加装饰器、迭代器、自定义迭代器、生成式

    一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用 ...

  6. python 函数基础及装饰器

    没有参数的函数及return操作 def test1(): print ("welcome") def test2(): print ("welcomt test2&qu ...

  7. python函数修饰器(decorator)

    python语言本身具有丰富的功能和表达语法,其中修饰器是一个非常有用的功能.在设计模式中,decorator能够在无需直接使用子类的方式来动态地修正一个函数,类或者类的方法的功能.当你希望在不修改函 ...

  8. python学习笔记(五):装饰器、生成器、内置函数、json

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...

  9. python笔记5:装饰器、内置函数、json

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

随机推荐

  1. 利用Gson将JSON数据进行格式化(pretty print)

    我们可以利用Gson包将String类型的JSON数据进行格式化. Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonPa ...

  2. 用 Visual Studio Code 调试运行在 homestead 环境中的 laravel 程序

    由于之前做 .net 开发比较熟悉 visualstudio,所以自 visualstudio code 发布后就一直在不同场合使用 vscode ,比如前端.node等等.最近在做 laravel ...

  3. Mac OS X 10.9 Mavericks 无法启动 WebStorm(PhpStorm)

    手滑把Mac的系统升到了10.9,结果机子上的PhpStorm6.0启动不了. 十分天真的重装了一次PhpStorm,问题依然没有修复. 开始怨念苹果的这次升级,毕竟以往的升级都是无缝的,升级OS就应 ...

  4. isa class superclass metaclass

    http://www.cnblogs.com/feng9exe/p/7232915.html Note: 其实这里的难点就在于对 和 的区分. .class 当 target 是 Instance 则 ...

  5. springboot 配置jpa启动报Error processing condition on org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration.pageableCustomizer

    springboot +gradle 配置jpa启动报Error processing condition on org.springframework.boot.autoconfigure.data ...

  6. TCL函数“参数自动补全” 与 “help 信息显示”

    tcl 函数参数自动补全和 help 信息显示 在EDA tool 中使用命令时,命令的参数可以通过 tab 键自动补全,而且可以使用 -help 显示帮助信息,使用起来很方便: 那么我们自己编写的 ...

  7. undefined reference to `sqrt'的问题

    主要问题是math.h这个头文件虽然在/lib/include 下有定义,但是该文件内并没有sqrt()的定义.解决的办法是:在编译的时候在后面加上-lm,意思是链接到math函数库. 在gcc下用到 ...

  8. 小白第一次使用Git随笔

    想研究Git很久了,一直没有找到很好的博客或论坛,近几天工作项目任务没有那么重,就想着找几篇文章把这玩意儿给解决掉,本博客是记录读廖雪峰老师所写的<Git教程>的随笔,以便巩固学习,若想学 ...

  9. mysql获取随机题目、排序

    mysql排序问题(对字符串类型数据进行排序)对普通数字字符串字段排序:select * from qq ORDER BY score*1 DESC,time*1 ASC 一.在mysql操作中我们经 ...

  10. mac最常用快捷键

    本人使用的是18款512g的macbookpro<后续简称mbp>,已升级最新mojave系统. 以下是我平时记录.也是使用最多的快捷键,惠存.     1.切换拼音和字母 control ...