如何与getattr()结合使用lambda:在python中动态装入python模块?

2024-10-06 11:17:49 发布

您现在位置:Python中文网/ 问答频道 /正文

从这个环境(它是一个名为nuke的图形程序)得到了一个全局对象,我可以在其中添加菜单项并将其与函数连接起来。此全局对象的工作方式如下:

menu.addCommand("Do This!", lambda: DoThings())

我想动态地阅读python模块,并将模块函数作为一个项目添加到全局菜单对象中。我为此写了一个类。我的课程的简化版本:

^{pr2}$

动态导入非常有效。但是每个生成的menuitem都链接到最后导入的函数。所以每个菜单项都一样。在

我不是专业程序员。所以我想我犯了个简单的错误。在

谢谢你的帮助。在


Tags: 模块对象函数程序图形环境方式动态
2条回答

试着传递f.call而不是兰达:呼叫(). 在

在表达式lambda: f.call()f是一个自由项,它引用封闭范围内的变量{}。{cd2>中的表观变化意味着λ2的变化。例如:

>>> n = 1
>>> lambda: n
<function <lambda> at 0x00000000027F0898>
>>> l = lambda: n
>>> l()
1
>>> n = 2
>>> l()
2

但是,lambda是不必要的,因为python中的函数和方法都是对象,它们本身可以在任何可调用的地方传递(比如lambda)。在本规范中:

^{pr2}$

f.call是一个表达式,它将计算为可调用的绑定方法。在

相关问题 更多 >