最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Python:def函数里面还有def,这是什么操作呢

互联网 admin 54浏览 0评论

Python:def函数里面还有def,这是什么操作呢

这是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

 

Python:def函数里面还有def,这是什么操作呢

这是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

 

发布评论

评论列表 (0)

  1. 暂无评论