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

Python: Substitute variable values before passing to another function

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

1
2
3
4
5
6
7
8
#!/usr/bin/python
def testFunc():
    print"Hello world!";
    return;

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


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

1
2
3
4
5
6
7
8
9
10
11
12
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实际上是一个字符串而不是一个函数对象,我只是为了安全起见添加了它。

在任何情况下,如果您真的计划执行这些函数,我会仔细考虑。执行任意函数可能是风险业务。

编辑:

我添加了另一行以更加确定,除非我们愿意,否则实际上不会执行代码。也把它改了,这样它会更整洁一点。


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

1
2
3
4
try:
    eval(myString)
except NameError:
    # not a function