python装饰器(decorator)

最近在自学Python,在装饰器这里迷惑了我很久,有几个问题一直困惑着我。1.装饰器的语法原理;2.为什么要用装饰器;

首先来看一下装饰器的原理。总而言之,装饰器就是函数或者类作为函数的返回值。将函数或者类作为装饰器的参数传递之后,装饰器对该函数或者类进行相应操作后再将其返回。这就是装饰器的基本原理。举个例子来讲,我们定义装饰器decorator,定义函数f。其过程便如下:f=decorator(f)。这里显得很抽象,我们用具体的例子来描述一下其意思。这里我们定义了一个函数:

1 def rectangle():
2     return ("我是一个矩形,没有圆角")
3 print(rectangle())

这里rectangle返回一个字符串。我们调用这个函数,系统会打印出该字符串。我们再定义一个装饰器:

1 def rounded(shape):
2     def rounded_shape():
3         print("已经对shape加了圆角")
4         return shape()
5     return rounded_shape()

该装饰器是对shape添加圆角。我们在rectangle前面加上该装饰器,

1 #@rounded
2 def rectangle():
3     return ("我是一个矩形,没有圆角")
4 print(rectangle())

直接来讲,就是对矩形添加了圆角,再次运行改程序,结果如下:

已经对shape加了圆角
我是一个矩形,没有圆角

以上便是装饰器的语法方面。

装饰器的核心思想,就是函数或者类可以作为返回值。

关于具体为什么要用装饰器,这里有一篇文章进行了详细的解释,我就不再赘述:http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html

时间: 2024-10-12 09:25:29

python装饰器(decorator)的相关文章

Python装饰器(Decorator)简介

Python有许多出色的语言特性,装饰器(Decorator)便是其中一朵奇葩.先来看看一段代码: def deco1(f): print 'decorate 1' return f def deco2(f): print 'decorate 2' return f @deco1@deco2 def foo(): return 'hello' 保存并执行上面的代码,你会看到如下输出: decorate 2 decorate 1 函数foo没有被调用,但是deco1,deco2被按照一个顺序被调用

python 装饰器 decorator

# def print_word(s): # return s # if __name__ == '__main__': # print_word('helo') # hello # ------------------------------------- # but i want <ul><li>{s}</li></ul> # ------------------------------------- def make_ul(fn): print &qu

python装饰器使用(一)

说起python装饰器decorator function是个很有意思的功能,用起来很方便,关键字@ 简单的理解: 是在函数执行前或后,做的一些操作,然后执行函数:然后再把函数作为赋值回来. 看下代码就理解了! #装饰器 def before(fun): def tmpFunc(): print('before print') fun() #在print之后才调用的fun函数,所以会这个装饰器会先print之后调用func return tmpFunc def after(fun): def t

python 装饰器学习(decorator)

最近看到有个装饰器的例子,没看懂, #!/usr/bin/python class decorator(object): def __init__(self,f): print "initial decorator" f() def __call__(self): print "call decorator" @decorator def fun(): print "in the fun" print "after " fun

对Python中装饰器(Decorator)的理解与进阶

有时候我们项目中的某些功能做些修改即需要对内部的某些函数添加一些附加功能,但是为了安全起见不想改变函数的源代码以及函数的调用方式,那么装饰器在这个地方会给我们带来很大的帮助. 装饰器(Decorator):(又叫语法糖) 定义:本质是函数,功能(装饰其它函数)就是为其他函数添加附加功能 原则:(1).不能修改被装饰的函数的源代码 (2).不能修改被装饰的函数的调用方式 1.先来实现一个简单的装饰器示例: #!/usr/bin/env python # -*- coding:utf-8 -*- #

对Python装饰器的个人理解方法

0.说明 在自己好好总结并对Python装饰器的执行过程进行分解之前,对于装饰器虽然理解它的基本工作方式,但对于存在复杂参数的装饰器(装饰器和函数本身都有参数),总是会感到很模糊,即使这会弄懂了,下一次也很快忘记,其实本质上还是没有多花时间去搞懂其中的细节问题. 虽然网络上已经有很多这样的文章,但显然都是别人的思想,因此自己总是记不牢,所以花点时间自己好好整理一下. 最近在对<Python核心编程>做总结,收获了不少,下面分享一下我自己对于Python装饰器的理解,后面还提供了一个较为复杂的P

一个关于python装饰器参数的问题

看到廖雪峰python教程上,python装饰器一章 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000 在最后的作业题上 再思考一下能否写出一个@log的decorator,使它既支持: @log def f(): pass 又支持: @log('execute') def f(

Python 装饰器学习心得

最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数,这个特殊的功能就是:装饰另一个函数.举一个最简单的例子来说: 1 def identify(f): 2 print 'Decorator identify called.' 3 return f 这里identify其实是一个装饰器,这个装饰器对输入的参数f不进行任何修饰,然后返回这个参数.其中的

深入浅出 Python 装饰器:16 步轻松搞定 Python 装饰器

Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都很相似--都是想要对一个已有的模块做一些"修饰工作",所谓修饰工作就是想给现有的模块加上一些小装饰(一些小功能,这些小功能可能好多模块都会用到),但又不让这个小装饰(小功能)侵入到原有的模块中的代码里去.但是OO的Decorator简直就是一场恶梦,不信你就去看看wikipedia上的词条