Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串构造可调用函数_Python - Fatal编程技术网

Python 从字符串构造可调用函数

Python 从字符串构造可调用函数,python,Python,如何从字符串构造和调用函数? 例如,考虑三个不同的函数和字符串列表,我希望能够使用字符串列表中的项来构造和调用适当的函数 def do_function1(): return 'done function1' def do_function2(): return 'done function2' def do_function3(): return 'done function3' listOfstr = ['function1','function2','func

如何从字符串构造和调用函数? 例如,考虑三个不同的函数和字符串列表,我希望能够使用字符串列表中的项来构造和调用适当的函数

def do_function1():
    return 'done function1'

def do_function2():
    return 'done function2'

def do_function3():
    return 'done function3'

listOfstr = ['function1','function2','function3']  

for item in listOfstr:
    result = 'do_'+item()
    print(result)

result = 'do_'+item()
TypeError: 'str' object is not callable

有问题的代码是

listOfstr = ['function1','function2','function3']  

for item in listOfstr:
    result = 'do_'+item()
在第一个循环中
,将具有值
'function1'
。您正在调用此字符串,就好像它是一个函数一样。但是字符串是不可调用的,并且没有分配给它们的代码

然后,在做任何事情之前,继续for循环

只需参考
,如下所示:

for item in listOfstr:
    func_name = 'do_' + item
    func = globals()[func_name]
    func()
def do_function1():
    return 'done function1'

def do_function2():
    return 'done function2'

def do_function3():
    return 'done function3'

list_of_functions = [do_function1, do_function2, do_function3]

for item in list_of_functions:
    result = item()
    print(result)
locals()["do_function1"]()

有问题的代码是

listOfstr = ['function1','function2','function3']  

for item in listOfstr:
    result = 'do_'+item()
在第一个循环中
,将具有值
'function1'
。您正在调用此字符串,就好像它是一个函数一样。但是字符串是不可调用的,并且没有分配给它们的代码

然后,在做任何事情之前,继续for循环

只需参考
,如下所示:

for item in listOfstr:
    func_name = 'do_' + item
    func = globals()[func_name]
    func()
def do_function1():
    return 'done function1'

def do_function2():
    return 'done function2'

def do_function3():
    return 'done function3'

list_of_functions = [do_function1, do_function2, do_function3]

for item in list_of_functions:
    result = item()
    print(result)
locals()["do_function1"]()

首先,通常你不需要这个。您也可以将函数本身放入如下列表中,而不是将字符串放入列表中:

for item in listOfstr:
    func_name = 'do_' + item
    func = globals()[func_name]
    func()
def do_function1():
    return 'done function1'

def do_function2():
    return 'done function2'

def do_function3():
    return 'done function3'

list_of_functions = [do_function1, do_function2, do_function3]

for item in list_of_functions:
    result = item()
    print(result)
locals()["do_function1"]()
但是,如果您坚持,您可以这样做:

for item in listOfstr:
    func_name = 'do_' + item
    func = globals()[func_name]
    func()
def do_function1():
    return 'done function1'

def do_function2():
    return 'done function2'

def do_function3():
    return 'done function3'

list_of_functions = [do_function1, do_function2, do_function3]

for item in list_of_functions:
    result = item()
    print(result)
locals()["do_function1"]()

locals()
按名称为您提供本地定义对象的字典。

首先,通常您不需要这个。您也可以将函数本身放入如下列表中,而不是将字符串放入列表中:

for item in listOfstr:
    func_name = 'do_' + item
    func = globals()[func_name]
    func()
def do_function1():
    return 'done function1'

def do_function2():
    return 'done function2'

def do_function3():
    return 'done function3'

list_of_functions = [do_function1, do_function2, do_function3]

for item in list_of_functions:
    result = item()
    print(result)
locals()["do_function1"]()
但是,如果您坚持,您可以这样做:

for item in listOfstr:
    func_name = 'do_' + item
    func = globals()[func_name]
    func()
def do_function1():
    return 'done function1'

def do_function2():
    return 'done function2'

def do_function3():
    return 'done function3'

list_of_functions = [do_function1, do_function2, do_function3]

for item in list_of_functions:
    result = item()
    print(result)
locals()["do_function1"]()

locals()
按名称为您提供一个本地定义对象的字典。

最明确的方法是拥有这些函数的字典:

funcs = {
    'function1': do_function1,
    'function2': do_function2,
    'function3': do_function3,
}

funcs[item]()

通过这种方式,您还可以在不破坏常规设计的情况下,随意命名函数、与项名称分离、使它们成为方法、移动到其他模块等。另一种方法是globals,正如已经回答的那样。

最明确的方法是拥有这些函数的字典:

funcs = {
    'function1': do_function1,
    'function2': do_function2,
    'function3': do_function3,
}

funcs[item]()

通过这种方式,您还可以在不破坏常规设计的情况下,随意命名函数、与项名称分离、使它们成为方法、移动到其他模块等。另一种方法是globals,正如前面已经回答的那样。

您在寻找吗?这个类似的问题可能会有所帮助:您不能只匹配字符串来调用返回语句net结束处的函数吗。string x=“dosmething.”如果(x==do something){call functions();或者更好地使用switch}您在寻找什么呢?这个类似的问题可能会有所帮助:您不能只匹配string,在返回状态net结束的地方调用函数吗。string x=“dosmething.”如果(x==做某事){call functions();或者最好使用switch}