小白教程

 找回密码
 立即注册
查看: 6836|回复: 0

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

[复制链接]

176

主题

185

帖子

663

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
663
发表于 2021-4-10 06:50:50 | 显示全部楼层 |阅读模式
这是Python的函数装饰器!是一种比较高级的用法,学了PYthon一段时间才发现这一个高级特性。

里面有点绕,感觉本质上是一个衣服模板(装饰器),然后把它装饰到任何一个你想要装饰的人(函数)身上。

例如:我想在函数开始和结束时分别打印一些信息,只需要先给函数穿上“衣服”,返回给函数,接着便可以使用:
  1. def decorate(func):
  2.         def iner(num):
  3.                 print("start ---")
  4.                 ret = func(num)
  5.                 print("return is ",ret)
  6.         return iner
  7.        
  8. def glor(num):
  9.         if num >5:
  10.                 return num
  11.         else:
  12.                 return 0

  13. glor = decorate(glor)
  14. glor(4)
  15. glor(8)
复制代码

运行结果:

start ---
return is  0
start ---
return is  8


应用场景:

1.作为界面回调函数使用:

例如wxpython的:

  1. self.Bind(wx.EVT_MENU, self.GenerateDeleteFolerMenu(123), id=new_id)
复制代码

按照以下进行定义,可以使得回调函数灵活度提高,传递动态的参数。

  1. def GenerateDeleteFolerMenu(self,aaa):
  2.         def OnDeleteFolerMenu(event):
  3.           print aaa
  4.           pass
  5.         return OnDeleteFolerMenu
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-9-20 14:52 , Processed in 0.108764 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表