美文网首页程序员学点儿Python
python装饰器——扩展函数功能

python装饰器——扩展函数功能

作者: 再忙一点儿 | 来源:发表于2018-07-15 15:57 被阅读6次
慢慢来

使用装饰器的目的是增加函数的功能,好处是不用破坏原函数的代码。应用场景诸如,本来你已经写好了某一个软件,突然某一天你要增某一函数的功能,这时候你又不能轻易修改其中一段函数的代码。那么,装饰器的出现在这个时候就显得很合时宜了。

构造器本质上就是一个函数,构造装饰器的关键在于运用高阶函数和嵌套函数。

高阶函数有两种:一种是将一个函数当做参数传递给另外一个参数,另外一种是将一个函数作为函数返回值传递给调用者。 理解高阶函数的关键是我们可以把函数看成是变量,这样我们就能理解一个函数为什么可以作为另外一个函数的参数或者返回值了,其具体例子如下所示:

  1. 第一种:
def haizi(func):

    func()

def play():

    pass

haizi(play)  #将play作为haizi()的参数
  1. 第二种:
def haizi():

    return play  #返回的是play()的内存地址

def play():

    pass

print(haizi())

嵌套函数是指在定义一个函数的内部再定义一个函数,而不是调用某个函数,注意两者的区别,如:

  1. 第一种:
def haizi():

    play()  #这是在haizi()内调用play()

def play():

    pass

haizi()
  1. 第二种:
def haizi():

    def play():  #这是在haizi()内嵌套定义play()

        pass

理解高阶函数和嵌套函数之后,我们就可以构造一个简单的装饰器:

def haizi(func):  #高阶函数的运用,

    def play():  #在haizi()内嵌套定义play()

        func()          print("从前初识这世间")  #增加输出字符串功能

    return play  #高阶函数的运用

@haizi  #语法糖,放在被装饰的函数前面

def baby():

    pass

baby()

在上面代码中,@haizi的作用等价于baby = haizi(baby),因此func指向函数baby(),故而func()等价于baby()。此时,我们调用baby()时,除了执行baby()函数本身的功能外,还输出了一串中文。这是baby()函数没有参数的情况,当其有参数时,其参数应该这样添加:

def haizi(func):  #高阶函数的运用,

    def play(*args):  #baby()的参数应该添加在这里,继而传给func()

        func(args)

        print("从前初识这世间")  #增加输出字符串功能

    return play  #高阶函数的运用

@haizi  #语法糖,放在被装饰的函数前面

def baby(str1):

    print("万般留恋 %s"% str1)

baby("看着天边似在眼前")

当装饰函数本身也有参数时,应该在原有基础上在最外层再嵌套一个函数:

def young(num):

    def haizi(func):  #高阶函数的运用,

        def play(*args):  #baby()的参数应该添加在这里,继而传给func()

            func(args)

            print("从前初识这世间")  #增加输出字符串功能

            if num > 3 :

                print("也甘愿赴汤蹈火去走它一遍")

        return play  #高阶函数的运用

    return haizi

@young(6)  #注意此时这里不再是haizi了

def baby(str1):

    print("万般留恋 %s"% str1)
baby("看着天边似在眼前")

看到这里,你已经初识了装饰器的世间了,该出去历练了!

相关文章

  • Python装饰器

    Python装饰器 装饰器作用 装饰器可也用来扩展函数或者类的功能,在不改变原有主体函数或类的情况下,简便的为其扩...

  • python装饰器——扩展函数功能

    使用装饰器的目的是增加函数的功能,好处是不用破坏原函数的代码。应用场景诸如,本来你已经写好了某一个软件,突然某一天...

  • Python装饰器

    不改变函数功能的调用方式下,完成了函数功能的扩展就是装饰器 输出123 testtest 不定长参数 装饰器 带...

  • 解析Python中的装饰器

    python中的函数也是对象,函数可以被当作变量传递。 装饰器在python中功能非常强大,装饰器允许对原有函数行...

  • python装饰器的使用(详细解析)

    什么是装饰器? python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,...

  • python装饰器的用途

    装饰器(decoration)是python里一个非常重要的特性,可以在不改变原有函数代码的情况下扩展函数的功能。...

  • #抬抬小手学Python# Python 中级知识之装饰器

    函数装饰器 装饰器(Decorators)在 Python 中,主要作用是修改函数的功能,而且修改前提是不变动原函...

  • [Python]装饰器

    本质:装饰器就是给 python 函数套上一件外套。作用是在不改变原来的函数下,增强函数功能。 函数装饰器 通过上...

  • 函数的高级应用

    装饰器 装饰器是Python中用一个函数装饰另外一个函数或类并为其提供额外功能的语法现象。装饰器本身是一个函数,它...

  • Python装饰器高级用法

    转载至:Python装饰器高级用法 在 Python 中, 装饰器 一般用来修饰函数,实现公共功能,达到代码复用的...

网友评论

    本文标题:python装饰器——扩展函数功能

    本文链接:https://www.haomeiwen.com/subject/tmyppftx.html