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

Python3学习笔记和心得(四)

时间:2016-08-01 15:29:20      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

初识装饰器(decorator )

Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。

 

使用 decorator 用Python提供的 @ 语法,这样可以避免手动编写 f = decorate(f) 这样的代码。

先看一个例子:

#!/usr/bin/env python


def outer(func):
    print(这是outer。)

    def inner():
        print(这是inner。)
        func()
        print(这是最后。)
    return inner


@outer
def f1():
    print(这是F1。)

f1()

输出结果:

这是outer。
这是inner。
这是F1。
这是最后。

 

是不是对这个输出感到惊奇?下面详细说说这段代码的执行过程。

  • 代码从上到下执行,先将outer函数和f1函数载入内存,然后调用f1()
  • 在f1函数前一行加@outer表示调用outer装饰器
  • 执行f1函数时,将函数名f1当作参数传入装饰器outer,并执行outer
  • 装饰器outer的参数func其实就是函数f1,而outer的返回值inner将赋值给f1,所以“rerurn inner”这句代码必不可少,而原来的f1将被inner取代
  • 执行装饰器outer先输出“这是outer。”,下面在执行函数inner(inner其实就是新的f1),输出"这是inner。" , 然后执行func函数,func实际上就是上一步传入的f1,所以执行func()就是执行原函数f1(),然后再输出"这是最后。"

此执行过程需不断体会方能领悟。

 

Python3学习笔记和心得(四)

标签:

原文地址:http://www.cnblogs.com/wumingxiaoyao/p/5725725.html

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