Hello Python :)
细节:
def fun():
return "Hello"
对于这个函数,fun代表这个函数,fun()代表执行这个函数,既然fun代表这个函数名,那fun也可以作为参数,传入另外一个函数。例子:
装饰器:
引言:在AirTech公司中,底层的Coder写的功能需要变更,那么有两种出路:1上层的业务部门Coder更改,这个代价太大。2由底层的Coder进行源码更改。一般来说会是由底层Coder做这件事,那么如果要给100个方法添加一个验证功能,那么One by One的修改方式太Low了,所以,装饰器应运而生。用来装饰函数或类,它可以让被装饰者在执行前或执行后做出某些操作,从而遵循了软件设计的原则——开放封闭原则(对内封闭,对外开放)。
例子:
def outer(fun):
def inner():
print("源码执行前")
r = fun()
print("源码执行后")
return r
return inner
@outer
def f1():
print("I am original code!")
如上所示,outer是装饰器函数,f1是源码中想要修改的函数,现在这个f1函数已经被改装了。调用f1函数,就会输出新内容。OK,这个装饰器做了如下事情:
1)执行outer函数,并将其下面的函数名当做参数
2)将outer的返回值重新赋值给f1,即重新定义f1函数
源函数带参数:
def outer(fun):
def inner(a1,a2):
print("源码执行前")
r = fun(a1,a2)
print("源码执行后")
return r
return inner
@outer
def f1(a1,a2):
print("I am original code!")
源函数带N个参数:写一个装饰器,应用不同参数的源函数
def outer(fun):
def inner(*args,**kargs):
print("源码执行前")
r = fun(*args,**kargs)
print("源码执行后")
return r
return inner
@outer
def f1(a1,a2):
print("I am original code!")
@outer
def f2(a3):
print("f2")
@outer
def f3(a4,a5,a6):
print("3个参数")
多个装饰器修饰一个函数:
@outer_1
@outer_2
def test():
print("Hello")