使用一个字符串在Python中调用函数

这个问题在这里已经有了答案:

  • 通过使用其名称(字符串)调用模块的功能10个答案

  • 你可以使用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

    上一篇: Use a string to call function in Python

    下一篇: Python: call a function from string name