标签:
一、函数基础
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
标签:
原文地址:http://www.cnblogs.com/pangguoping/p/5555882.html