在Python中动态调用函数的方法是什么?

Alf*_*Osa 4 python

我想做的事情如下:

dct = ['do_this', 'do_that']
dct[0]() // call do_this
Run Code Online (Sandbox Code Playgroud)

但是你不能将字符串作为函数调用(会出错).

我怎样才能做到这一点,而无需切换,并且不使用lambda表达式或功能的列表?

显然我想按名称引用函数.

Fré*_*idi 12

函数是Python 中的第一类对象:

def do_this():
    pass

def do_that():
    pass

dct = [do_this, do_that]
dct[0]()  # calls do_this()
Run Code Online (Sandbox Code Playgroud)

如果dct绝对必须是一个字符串列表,我会选择eval():

eval(dct[0] + "()")
Run Code Online (Sandbox Code Playgroud)

这不是很漂亮,但之间的切换globals(),并getattr()在适当的模块可以是一个痛苦.


kan*_*aka 10

函数是第一类对象.像这样:

def do_this():
    print "In do_this"

def do_that():
    print "In do_that"

dct = [do_this, do_that]
dct[0]()
Run Code Online (Sandbox Code Playgroud)

如果你真的想从字符串列表中调用它们,可以使用globals():

dct = ['do_this', 'do_that']
globals()[dct[0]]()
Run Code Online (Sandbox Code Playgroud)

但我建议使用globals()(或locals())可能不是解决问题的正确方法.以蟒蛇的方式:>>> import this