这个类似于oop里的AOP操作
还有一个知识点就是坷里化函数
函数坷里化1
>>> def main(a):
def test(b):
print("test")
print("main")
return test
>>> main(1)
main
<function main.<locals>.test at 0x02D33AE0>
>>> main(1)(2)
函数坷里化2
第二个函数参数是函数的情况
>>> def main(a):
def test(b):
b()
print("main")
return test
>>> main(1)(lambda :print("Hello"))
main
Hello
>>>
当函数的函数参数带参数也就是三层坷里化
>>> def main(a):
def test(b):
def wrap(para):
b(para)
return wrap
print("main")
return test
>>> main(1)(lambda x:print(x+1))
main
<function main.<locals>.test.<locals>.wrap at 0x02D47810>
>>> main(1)(lambda x:print(x+1))(12)
main
13
>>>
看看Py里的标准的decorator
#coding=utf-8
#!/usr/bin/python
def log(tag):
print ('[%s]:' % tag)
def dec(fn):
def wraped(*argv,**kwgs):
print ('before')
fn(*argv,**kwgs)
print ('after')
return wraped
return dec
@log("INFO")
def main(n):
for i in range(n):
print (i*2)
if __name__ == "__main__":
#@log(argv) 实际上等同于 main=log(argv)(main) --
main(10)