Python动态函数生成

2024-10-03 11:26:30 发布

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

我使用的是PyQt,希望根据字符串列表创建一个菜单。在

问题是当我想调用'addAction'时,它需要一个不带任何参数的回调函数(对于每个字符串)。在

菜单很简单

menu.addAction("Open", self.open)
menu.addAction("Exit", self.quit)

但是,我只想使用一个函数,并将“action string”作为参数传入。在

我想知道python是否可以这样做:

^{pr2}$

下面是我的代码片段:

def printParam(parameter):
    print "You selected %s" % parameter


# parameters = list of strings

menu_bar = QMenuBar()
menu = menu_bar.addMenu('Select Parameter')
for parameter in parameters:
    # This line will not work because the action does not pass in
    # any arguments to the function
    menu.addAction(parameter, printParam)

有什么建议非常感谢


Tags: the函数字符串inself参数parameter菜单
3条回答

是的,这叫做部分应用。标准库有一个类来部分应用函数^{}。您应该在示例中编写partial(f, x=7)partial(f, 7)(因为它是一个位置参数,不需要跳过任何位置参数)。在

可以使用闭包,如下所示:

def printParam(parameter):
    def callback():
        print "You selected %s" % parameter
    return callback

for parameter in parameters:
    menu.addAction(parameter, printParam(parameter))

functools.partial()允许您提前提供一些参数。它允许您根据需要进行自定义回调。在

>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18

相关问题 更多 >