使用一个字符串在Python中调用函数
这个问题在这里已经有了答案:
你可以使用eval():
myString = "fullName( name = 'Joe', family = 'Brand' )"
result = eval(myString)
但要小心, eval()
被许多人认为是邪恶的。
这不完全回答你的问题,但也许它有帮助:
如前所述,如果可能的话应该避免使用eval
。 更好的方法是使用字典解包。 这也是非常动态的,并且不易出错。
例:
def fullName(name = "noName", family = "noFamily"):
return name + family
functionList = {'fullName': fullName}
function = 'fullName'
parameters = {'name': 'Foo', 'family': 'Bar'}
print functionList[function](**parameters)
# prints FooBar
parameters = {'name': 'Foo'}
print functionList[function](**parameters)
# prints FoonoFamily
我知道这个问题很古老,但你可以这样做:
argsdict = {'name': 'Joe', 'family': 'Brand'}
globals()['fullName'](**argsdict)
argsdict
是一个参数字典, globals
使用字符串调用该函数,而**
将该字典扩展为参数列表。 比eval
更清洁。 唯一的麻烦在于分割字符串。 一个(非常混乱)的解决方案:
example = 'fullName(name='Joe',family='Brand')'
# Split at left parenthesis
funcname, argsstr = example.split('(')
# Split the parameters
argsindex = argsstr.split(',')
# Create an empty dictionary
argsdict = dict()
# Remove the closing parenthesis
# Could probably be done better with re...
argsindex[-1] = argsindex[-1].replace(')', '')
for item in argsindex:
# Separate the parameter name and value
argname, argvalue = item.split('=')
# Add it to the dictionary
argsdict.update({argname: argvalue})
# Call our function
globals()[funcname](**argsdict)
链接地址: http://www.djcxy.com/p/55159.html