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

python笔记 - day4-之装饰器

时间:2016-07-14 18:49:32      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

               python笔记 - day4-之装饰器                    

需求:
给f1~f100增加个log:
def outer():                #定义增加的log
    print("log")  


def f1():
    outer()                   #分别调用函数
    print("F1")

def f2():
    outer()                   #分别调用函数
    print("F2")

def f100():
    outer()                   #分别调用函数
    print("F100")

f1()
f2()
f100()

使用装饰器,增加log:
def outer(func):
    def inner():
        print("log")
        return func()
    return inner

@outer
def f1():
    print("F1")

@outer
def f2():
    print("F2")

@outer
def f100():
    print("F100")

f1()
f2()

并增加after:
def outer(func):
    def inner():
        print(log)
        ret = func()
        print("after")
        return ret
    return inner

@outer
def f1():
    print("F1")

@outer
def f2():
    print("F2")

@outer
def f100():
    print("F100")

f1()
f2()

装饰器流程剖析:

声明:
【函数的整体是可以被其他函数当做参数所调用,传递的】
def f1():
    print(123)

def f2(xxx):
    xxx()
f2(f1)

结果:123


流程剖析,例一:
def outer(func):
    print(123,func)

@outer
def f1():
    print(F1)

Readme:
1.执行程序后,会把123,重新赋值给f1,并且把老的,加载到内存的f1“print(F1)”,当做参数,当做参数,传给func;
2.print(123,func),func,就是老的f1,通过传给func打印出来;

流程剖析,例二:
def outer(func): def inner(): print(before) #赋值给下面的f1 func() #调用执行老的f1 print(after) return inner #把结果返回给下面f1,并赋值给下面的f1;(注意:这里加括号,就是执行函数;不加括号,就是把inner函数体所有内容返回给f1,并重新赋值给f1) @outer def f1(): print(F1) f1() Readme: * 定义了两个函数,没有调用函数,不会执行; 功能一: 加上@outer,(@ + 函数名)后实现的效果: 自动执行outer函数,并且将其下面的函数名f1当作参数传递; 功能二: 将outer函数的返回值,重新赋值给f1;

装饰器,返回值:
def outer(func):
def inner():
print(‘before‘)
r = func()
print(‘after‘)
return r
return inner

@outer
def f1():
print(‘F1‘)
return "砍你"

ret = f1()
print("返回值:",ret)

装饰器,参数:
def outer(func):
def inner(a):
print(‘before‘)
r = func(a)
print(‘after‘)
return r
return inner

@outer
def f1(arg):
print(arg)
return "砍你"

ret = f1(‘fafafa‘)
print(ret)


装饰器,接收多个参数:
def outer(func):
def inner(*args,**kwargs):
print(‘before‘)
r = func(*args,**kwargs)
print(‘after‘)
return r
return inner

@outer
def f1(arg):
print(arg)
return "砍你"

ret = f1(‘fafafa‘)
print("返回值:",ret)


@outer
def f2(arg1,arg2):
print("F2")

f2(‘bbbbb‘,‘ccccc‘)
 

 

python笔记 - day4-之装饰器

标签:

原文地址:http://www.cnblogs.com/tangshengwei/p/5671124.html

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