所以我正在使用python 2.7。
我正在使用此行在字典中执行一系列语句:
for key in pipeline:
exec(dictionary[key], globals(), globals())
这是管道包含的内容:
pipeline = {
'initializer' : 'initializer()',
'preprocesser' : 'preprocesser()'
}
这是两个initializer()和preprocesser()函数:
def initializer():
global params
data = pd.read_csv(params['dataset'])
data.fillna(0, inplace=True)
params['data'] = data
return params
def preprocesser():
global params
print(params.keys())
这两个函数都修改了一个称为params的全局字典,这是它的样子:
params = {
'instruction' : "Predict median house value",
'dataset' : './data/housing.csv',
}
出于某种原因,如果我打印出params的字典键,它将打印更新的键:initializer()函数应该在全局params字典中添加一个“数据”键。但是,如果我打印出preprocessor()函数中的键列表,我只会得到['instruction','dataset']。如果我在调用exec函数之后(在全局范围内)立即打印出键,则它会正确打印出['instruction','dataset','data]。为什么要全局更新,但是之后我无法在preprocesser()函数中访问该更新的参数。我该如何解决?
In [3]: pipeline = {
...: 'initializer' : 'initializer()',
...: 'preprocesser' : 'preprocesser()'
...: }
In [4]: list(pipeline)
Out[4]: ['preprocesser', 'initializer']
因此,预处理程序运行了[[first。您实际上根本不需要dict
,您可以只使用一个元组列表,或者如果由于某些其他原因您的代码需要一个dict,则可以按想要的顺序保留键列表。运行的东西。但是总的来说,不建议您采用整个方法。不要在这里使用
exec
,它没有任何优势,动态代码执行也有很多弊端,在这种情况下完全没有必要。