码迷,mamicode.com
首页 > 编程语言 > 详细

python学习笔记--装饰器

时间:2016-04-05 23:09:52      阅读:463      评论:0      收藏:0      [点我收藏+]

标签:

1.首先是一个很无聊的函数,实现了两个数的加法运算:

def f(x,y):
    print x+y
f(2,3)

输出结果也ok

5

2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来不这么单调:

def showInfo(fun):
    def wrap(x,y):
        print "The function before"
        func(x,y)
        print "The function after"
    return wrap

def f(x,y):
    print x+y

f = showInfo(f)
f(2,3)

此时的输出:

The function before
5
The function after

3.此时我们又定义了一个f1()函数也希望它和f()函数有一样的输出格式,只要在f1()执行之前调用一次showInfo()函数:

def showInfo(fun):
    def wrap(x,y):
        print "The function before"
        func(x,y)
        print "The function after"
    return wrap

def f1(x,y):
    print x*y

f1 = showInfo(f1)
f1(2,3)
The function before
6
The function after

4.此时我知道你应该大概解到了函数修饰的作用了,可是你会发现我们本义是想调用f()函数的,可是在调用的过程中使用了两次调用才得到了我们想要的效果。所以我们使用python提供的装饰器方法来修改我们的代码:

def showInfo(func):
     def wrap(x,y):
        print "The function before"
        func(x,y)
        print "The function after"
    return wrap

 @showInfo
 def f(x,y):
   print x+y
 
 @showInfo
 def f1(x,y):
     print x*y
 
 f(2,3)
 f1(2,3)

这次的结果如下,我们只需直接调用我们要用的函数就得到了我们想要的结果了:

The function before
5
The function after
The function before
6
The function after

总结:这正是python装饰器意义所在的地方。python中的可调用对象包括函数 方法 实现了__call__方法的类。python中的函数也是对象,可以作为高阶函数的参数传入或返回值返回。因此我们可以用高阶函数对某个函数进行封装,这就是python中的装饰器。他的语法结构类似这样:

@decorator
def func(func):
  pass

 

python学习笔记--装饰器

标签:

原文地址:http://www.cnblogs.com/dayxiaobei/p/5357139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!