繁体   English   中英

Python:在模块之间传递函数名称作为参数

[英]Python: Passing a function name as an argument between modules

版本号

带有Pygame 1.9.2的Python 3.4

如何将一个函数/方法的名称从一个不存在该函数的模块传递到包含该函数/方法的模块,而不必求助于使其成为字符串并通过eval()对其求值?

背景

我有一个简单的MVC模式用于培训。 为了简单起见,我们假设我们按下了菜单中的一个按钮。 这是发生了什么:

控制器将我们的事件(作为ClickEvent的单击)(包含位置,鼠标按钮以及是否已按下或释放按钮)发送到当前运行的逻辑菜单。 然后,菜单根据其位置评估单击,如果单击发生在按钮上,它将返回一个ModelEvent,其中包含模型方法的名称。 然后,模型接收所述ModelEvent并对其进行评估。 如果发生任何可见的更改,它将创建一个新的ViewEvent(这超出了我的问题)。

方法

到目前为止,我以三种方式解决了这个问题,一次是通过lambda(这似乎根本无法满足我的需要,或者是我误解了它),另一次是通过将字符串与eval()一起使用。 后一种方法的缺点很明显:函数名称必须在实例之间作为字符串传递,然后由eval()进行评估,这会花费时间。

在不使用字符串和eval()的情况下,将方法和函数的名称从一个不存在的模块传递到另一个要执行的模块的有效方法是什么?

或者,如果您在我的一般方法中发现任何严重错误,那么在我仍在学习的过程中,我很高兴听到它。

当我正确理解您的信息时,您就将回调与事件混在一起了。也许这使问题变得如此棘手。

在Python中,函数是对象,可以作为字符串之类的任何其他对象传递。 因此,无需传递名称并对其进行评估。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM