python 装饰器 介绍

简言之,python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。

参考文章:https://www.cnblogs.com/Eva-J/p/4977823.html

def login(usr):
    if usr == 'Eva_J':
        print("loging ...")
        return True
def wrapper(funcname):#funcname是函数地址,不是函数,return funcname只是返回函数地址,不是运行
    if login('Eva_J'):
        return funcname
def home1():
    print 'this is the home page'

#home=wrapper(home1)#home是函数地址
#home() #运行home,即在不改变home函数内容的前提下,对home增加额外功能

#点睛之笔"home = wrapper(home)"
#如果想去除 每次操作都加上的点睛之笔,可以按下面的方式定义home
@wrapper  #在home1定义时,前面加上@wrapper,wrapper按需要改成自己的函数名
def home1():
    print 'this is the home page'
#调用的时 可以直接这样调用
#home1()

#home传参数

def wrapper1(funcname):
    print 'funcname:',funcname# funcname 是home函数的地址
    def wrapper2(argv):#此处是函数嵌套定义,只是定义并不能运行
        if login(argv):#调用login
            print 'funcname:',funcname
            return funcname(argv)#login调用成功后,调用home
        else:
            return False
    return wrapper2 #返回wrapper2函数的地址


def home(usr):
    print 'this is the home page!'
    print 'hello ,',usr

#home = wrapper1(home)
#此时的home是wrapper2函数的地址
#home('Eva_J')#调用wrapper2 ,传入参数Eva_J

##精简调用
@wrapper1
def home(usr):
    print 'this is the home page!'
    print 'hello ,',usr

home('Eva_J')

#if __name__=='__main__':
    #c = consumer()
    #produce(c)

#即便不显示调用 home ,@wrapper1这个声明也是会调用wrapper1函数,先把函数地址传
#进去。然后该函数运行时,运行它自身和附加功能函数。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

致一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值