Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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_List_Dictionary_Definition - Fatal编程技术网

在Python中将与定义名称对应的字符串列表转换为定义查找字典

在Python中将与定义名称对应的字符串列表转换为定义查找字典,python,list,dictionary,definition,Python,List,Dictionary,Definition,是否有方法将函数或定义名称(字符串)列表转换为基于词典的查找表,其中键是定义名称,值是与名称对应的定义类(定义名称是给定的名称)。据说,最安全的方法是使用查找表方法(字典映射),例如。但是,在这种情况下,定义名称列表是可变的,用户/程序员不能直接将其写入代码,而是必须以编程方式添加 那么,我如何才能做到以下几点: nameList = ['methodName1','methodName2','methodName3','methodName4'] methodLookup = {} for

是否有方法将函数或定义名称(字符串)列表转换为基于词典的查找表,其中键是定义名称,值是与名称对应的定义类(定义名称是给定的名称)。据说,最安全的方法是使用查找表方法(字典映射),例如。但是,在这种情况下,定义名称列表是可变的,用户/程序员不能直接将其写入代码,而是必须以编程方式添加

那么,我如何才能做到以下几点:

nameList = ['methodName1','methodName2','methodName3','methodName4'] 
methodLookup = {}
for name in nameList:
        methodLookup.update({name:name.strip('\'')})
for var, val in dictionary.items(): exec(var + ' = val')
其中,字典值是函数而不是字符串

本质上与以下内容相似但相反的内容:

nameList = ['methodName1','methodName2','methodName3','methodName4'] 
methodLookup = {}
for name in nameList:
        methodLookup.update({name:name.strip('\'')})
for var, val in dictionary.items(): exec(var + ' = val')

我想你可以用这样的东西:

def plus1(x):
    return x + 1
def plus2(x):
    return x + 2

function_list = ['plus1', 'plus2']
function_dict = {function_name: globals()[function_name] for function_name in function_list}
然后,您可以通过以下方式调用
plus1
函数:

function_dict['plus1'](5)
#6

那正是我需要的,谢谢。以这种方式使用globals()安全吗?有些人建议尽可能避免使用globals()和locals()。
locals()
只有在函数内部使用时才有效,在这种情况下,您需要使用
globals()
,只要没有任何其他同名函数/变量oops,就应该是安全的。我只是意识到
locals()
在这种情况下不起作用,因为我们使用的是
dict
理解,所以如果您将其更改为正常的
for
循环,它将正常工作