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

python-装饰器

时间:2016-06-03 14:12:05      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:

一、函数基础

1.函数基础

‘‘‘例1‘‘‘
def foo():
    print(foo)
foo    #表示是函数,函数名指函数所在内存中的位置,如果带后面括号表示执行函数
foo()   #表示执行函数
‘‘‘例2:‘‘‘
def foo():
    print(foo)
foo = lambda x=1: x+1
foo()  #执行下面的lambda表达式,而不再是原来的foo函数,因为函数foo被重新定义

 以上code说明:

1.在def 函数时,以顺序执行,如果相同的函数名,会被最后函数覆盖以前的

2.如果直接func名而没有后面的圆括号的话,只指向函数在内存中的位置

3.lambda表达式会自动return结果,而def需要定义return值

2.把函数作为参数传递

def f1():
    print(123)
def f2(xx):
    xx()

f2(f1)

输出结果:
12

将函数名称f1作为参数,传递给f2()函数,此时f1== xx  ,xx() == f1,  函数f2()内执行xx()  实际上是执行函数f1()

 

二、触发器

1.

def outer(func):
   
    return "132"

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

@ + 函数名

功能:

1.自动执行outer函数并且将其下面的函数名f1当作参数传递

2.将outer函数的返回值,重新赋值给f1,  相当于把函数f1重写了,即  f1 = "123" 

 下面证明一下上面的结论:

def outer(func):
    def inner():
        print(before)
    return inner

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

f1()

输出结果:
before

函数f1() 被装饰器装饰之后,如果执行f1() 那么不再是执行print("F1")了,而是执行的是inner()函数。因为装饰器outer返回了inner,即把inner整个函数返回给了f1,此时也就是把f1函数重写为inner函数了。所以执行的结果是 :  before   而不是 F1

python-装饰器

标签:

原文地址:http://www.cnblogs.com/pangguoping/p/5555882.html

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