Python通过间接调用函数

2024-04-29 07:29:21 发布

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

窗户7,Python2.7 MPD2。在

我正在写一个程序来控制MPD。在

MPD有几个(超过50个)不同的功能。在

通常情况下,打电话的形式是:

mpd_client.pause()
#or
mpd_client.playlistmove(playlist_name, old_pos, new_pos)

我想把所有单独的调用封装在一个函数中,这样就可以使用一个try/except。在

我想我想用一些lambda,和*args,但是我对这两种都没有什么经验。在

在我的程序主体中,我想称之为:

^{pr2}$

我设想我的功能看起来像。。。在

def MPD(required_param, *args):
    try:
        mpd_client.required_param(args)
    except:
        ...

当然,这是行不通的。在

除了编写一个巨大的switch语句和50个不同的try结构之外,有没有方法可以使用lambda?在

可能是这样的:

lambda m=mpd_client.required_param: m(args)

但是,这也不管用。在

我不知道。在

谢谢,马克。在


Tags: lambdapos程序功能clientparamrequired情况
2条回答

您需要使用getattr()检索按名称调用的实际方法:

getattr(mpd_client, required_param)(*args)

(请注意,您还需要在函数调用的args前面加上*,以便将参数列表重新展开为单独的参数。)

你需要的是对象。在你的代码中:

func = mpd_client.__dict__['pause']
func()
func = mpd_client.__dict__['playlistmove']
func(playlist_name, old_pos, new_pos)

相关问题 更多 >