我正在尝试在函数内部引用全局变量。此函数在单独的文件中定义,然后导入到主文件中并应用于数据集。这是代码:
def to_nominal(dataset):
global ngdp
global gdp_deflator_series
bools = []
for date in ngdp.Date:
if date in set(dataset.Date).intersection(set(ngdp.Date)):
bools.append(True)
else: bools.append(False)
npci_deflator_series = gdp_deflator_series[bools].reset_index(drop = True)
bools = []
for date in dataset.Date:
if date in set(dataset.Date).intersection(set(ngdp.Date)):
bools.append(True)
else: bools.append(False)
dataset_bools = dataset[bools]
dataset = dataset_bools.reset_index(drop = True).drop(['YEAR', 'QUARTER', 'Date'], axis = 1).mul(npci_deflator_series, axis =0)
dataset['Date'] = dataset_bools.Date
return dataset
我抛出错误:未定义'ngdp'。最初我虽然是因为我必须指定ngdp是全局变量,但是问题似乎仍然存在。我认为这可能与我将函数导入另一个文件的事实有关吗?任何想法将不胜感激。
答案 0 :(得分:0)
从您的描述中,听起来好像此函数是在模块A
中定义的,并导入到另一个具有自己的全局变量B
的模块ngdp
中,您想要A.to_nominal
来使用B.ngdp
。
那是不可能的。全局作用域与定义功能的模块相关;即使将函数导入另一个模块,它仍会在原始模块(A
)范围内查找全局变量。
您需要在同一模块中定义全局和函数(最简单的方法),或者以其他方式(最好是通过循环导入, not )将它们捆绑在一起,{ 1}}导入A
,而ngdp
导入B
,因为这很容易出错,因为全部退出)。如果它们不能在同一个模块中,只需将to_nominal
作为参数传递给ngdp
将是一个合理的解决方案。