文档章节

python装饰器基础讲解

jastme
 jastme
发布于 2016/02/04 14:20
字数 345
阅读 87
收藏 10

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计(比如django里的login_required),有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。


下面这是个简单的例子。

def my_decorator(args):                      #函数my_decorator 可带参数
     def wrapper():                          #内部函数
          print "Something is happening before some_function() is called."
          args()                             #把外面的函数当成对象传入参数,一切皆为对象的理念是有多重要
          print "Something is happening after some_function() is called."
     return wrapper

@my_decorator                                #申明下面的函数会使用这个装饰器,把下面的函数当成参数传到my_decorator函数中。
def function1():             
       print "Wheee!"

function1()

不知道大家能看明白不,其实这个是最基础的用法。

再复杂一点  使用多个修饰器

这个很好的例子 来自stackoverflow

def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makebold              
@makeitalic                  #调用顺序,从内到外
def hello():
    return "hello world"

print hello()

<b><i>hello world</i></b>


© 著作权归作者所有

共有 人打赏支持
jastme
粉丝 35
博文 127
码字总数 60072
作品 0
成都
程序员
python 装饰器及标准库functools中的wraps

最近在看 flask的视图装饰器 时,忽然想起预(复)习一下python的装饰器. 这里有一篇比较好的讲解装饰器的书写的 Python装饰器学习(九步入门) . 这里不单独记录装饰器的书写格式了,重点是工作...

L很失败L
2015/08/20
0
0
python基础(7):变量、参数、函数式编程

1、使用glob模块通配符过滤文件 使用glob模块可以用通配符的方式搜索某个目录下的特定文件,返回结果是一个list import globflist=glob.glob('*.jpeg') 使用os.getcwd()可以得到当前目录,如...

大数据之路
2014/05/28
0
0
Python基础——装饰器、模块(0417)

一、Python基础——复习 1、字符串的常用操作 2、列表的常用操作 3、字典的常用操作 二、Python——装饰器:函数可以是变量 1、Python是一种面向对象的编程语言,在Python中所有的都可以是Pyt...

python初雪之路
04/17
0
0
Python装饰器AOP 不定长参数 鸭子类型 重载(三)

1 可变长参数与关键字参数 代表任意长度可变参数 代表关键字参数 用和只是为了方便并没有强制使用它们. 缺省参数即是调用该函数时,缺省参数的值若未被传入,则传入默认预设的值。 注意 : 须...

善良小郎君
06/17
0
0
设计模式之:理解 Python 中的装饰器

1、问题 文章先由stackoverflow上面的一个问题引起吧,如果使用如下的代码: @makebold @makeitalic def say(): return "Hello" 打印出如下的输出: <b><i>Hello<i></b> 你会怎么做?最后给出......

大数据之路
2013/07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
16分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
18分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
34分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部