这是Python的函数装饰器!是一种比较高级的用法,学了PYthon一段时间才发现这一个高级特性。
里面有点绕,感觉本质上是一个衣服模板(装饰器),然后把它装饰到任何一个你想要装饰的人(函数)身上。
例如:我想在函数开始和结束时分别打印一些信息,只需要先给函数穿上“衣服”,返回给函数,接着便可以使用:
- def decorate(func):
- def iner(num):
- print("start ---")
- ret = func(num)
- print("return is ",ret)
- return iner
-
- def glor(num):
- if num >5:
- return num
- else:
- return 0
-
- glor = decorate(glor)
- glor(4)
- glor(8)
复制代码运行结果: start ---
return is 0
start ---
return is 8
应用场景:1.作为界面回调函数使用: 例如wxpython的: - self.Bind(wx.EVT_MENU, self.GenerateDeleteFolerMenu(123), id=new_id)
复制代码按照以下进行定义,可以使得回调函数灵活度提高,传递动态的参数。 - def GenerateDeleteFolerMenu(self,aaa):
- def OnDeleteFolerMenu(event):
- print aaa
- pass
- return OnDeleteFolerMenu
复制代码
|