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

Python装饰器理解

时间:2018-03-31 19:32:50      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:本质   return   image   函数调用   并且   output   body   bubuko   现在   

本文介绍Python其中一个强大的功能--装饰器

 

技术分享图片

装饰器本质上就是一个函数,在不修改源代码,调用方法的前提下,用来给其他函数添加功能的函数

想象一下,你已经开发完成一个功能,并且投入应用中,却发现函数少些功能,怎么办?

修改函数源代码已经不太可能,不能修改函数代码,函数调用方法来实现增加函数功能,这时,装饰器就该登场了

 

知识要求   :  高阶函数,内嵌函数

先看一个函数:

def test1():
    print(-----in the test1 -----)

可以说是一个最简单的函数,现在在不修改函数源代码,不修改调用方法前提下,增加打印一个语句hello world,怎么加?

我们需要再次定义一个函数:而这个函数,就是一个最简单的装饰器:

1 def warpper(func):
2     def inner():
3         print(‘hello world)
4         func() 
5     return inner

 warpper函数内嵌inner函数,最后返回inner函数,可是,这个函数怎么用呢?

你肯定已经看出来warpper函数参数是一个函数,在inner函数内部进行调用

所以,我们可以这样用:

warpper(test1)

 

但是这样肯定不行的,返回值是一个函数的引用,所以需要用一个变量名来存储,然后加上小括号调用

func = warpper(test1)
func()
# -------------output( hello world \n hello jeden )

 

这就完成了函数的装饰, 但是调用方法改变了,原来的test1改成了func(),所以做以下修改:

func() = warpper  # 改成  test1 = warpper(test1)
func()    #  改成test1()

 

已经完成了大半了,最后用python提供的语法糖就行了

类似与这样  --  @function_name

# 第一过程最终代码展示
def warpper(func):
    def inner():
        print(‘hello world)
        func()
    return inner

@warpper
def test():
    print(‘hello jeden)

test()

 

这就是最简单的装饰器案例。

Python装饰器理解

标签:本质   return   image   函数调用   并且   output   body   bubuko   现在   

原文地址:https://www.cnblogs.com/jedenzhan/p/8683476.html

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