python入门(六)装饰器的理解

装饰器用于拓展原有函数功能的一种函数
比如:

def helloWorld(fun)
        def out()
                print ("======start========")
                fun()
                print ("=====end======")
        return out

@helloWorld
def back ()
        print ("let's go")

back()

运行结果:

======start========
let's go
=====end======

python入门(六)装饰器的理解br/>@符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作
@helloWorld这就是一个简单的装饰器
运行步骤def back()→return out →def out()
带参数的装饰器:

def helloWorld(arg):
        def out(fun):
                def go():
                        print ("======start========")
                        fun()
                        print ("=====end======")
                return go       
        return out

@helloWorld("will')
def back ():
        print ("let's go")

back()

运行结果:

======start========
let's go
=====end======

看到装饰器自带一个参数传入,那么运行过程中这个参数会代入运行,整体的运行过程
python入门(六)装饰器的理解

当函数也带参数参与:

def logging(taskname):

    def wrapper(func):

        def retu(*args, **wkargs):
            # 函数通过装饰起参数给装饰器传送参数
            print ('before task',taskname)
            # 装饰器传变量给函数
            taskid = 1
            summer, funcres = func(taskid, *args, **wkargs)
            print ('after task', taskid, summer)

        return retu
    return wrapper

@logging("test")
def testd(taskid):
    print ("testd runing",taskid)
    return "task summer success eg",[]

testd()

运行结果和步骤:
python入门(六)装饰器的理解

猜你喜欢

转载自blog.51cto.com/13654063/2104926
今日推荐