Python:在传递给另一个函数之前替换变量值

Python:在传递给另一个函数之前替换变量值,python,string,variable-substitution,Python,String,Variable Substitution,我想确定输入字符串是否是有效的函数名。 在传递给isfunction调用之前,有没有办法替换变量的值 #!/usr/bin/python def testFunc(): print "Hello world!"; return; myString = "testFunc"; isfunction(testFunc); // This returns **True** isfunction(myString); // This returns **False** 一种方法是使用

我想确定输入字符串是否是有效的函数名。 在传递给isfunction调用之前,有没有办法替换变量的值

#!/usr/bin/python
def testFunc():
    print "Hello world!";
    return;

myString = "testFunc";
isfunction(testFunc); // This returns **True**
isfunction(myString); // This returns **False**

一种方法是使用
eval
,它将字符串解释为代码:

try:
    eval(myString)
except NameError:
    # not a function

假设要检查是否存在加载的函数,可以尝试以下操作:

try:
    if hasattr(myString, '__call__'):
        func = myString
    elif myString in dir(__builtins__):
        func = eval(myString)
    else:
        func = globals()[myString]

except KeyError:
    #this is the fail condition

# you can use func()
第一个
if
实际上是不必要的,如果您总是保证myString实际上是一个字符串而不是一个函数对象,我只是为了安全才添加它

无论如何,如果你真的打算执行这些函数,我会小心行事。执行任意函数可能有风险

编辑:


我添加了另一行代码,以确保我们不会真正执行代码,除非我们愿意。还对其进行了更改,使其更加整洁

您的意思是字符串是有效的函数名,还是变量是函数?@khelwood:我想知道myString中的值是否有效或不可能重复:@Ashwin那么当
myString
testFunc时,
isfunction(myString)
为什么要返回false
?hasattr返回False,因为它将myString视为字符串变量。如果正确,则返回False。这就是其他条件存在的原因。这将执行字符串包含的任何代码,并可能导致比NameError捕获的错误多得多的错误。