函数内的全局变量引用



>我正在尝试引用函数内的全局变量。此函数在单独的文件中定义,并导入到主文件中并应用于数据集。代码如下:

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是一个全局变量,但问题似乎仍然存在。我认为这可能与我将函数导入另一个文件的事实有关?任何想法将不胜感激。

从您的描述来看,听起来这个函数是在模块A中定义的,并导入到另一个模块B中,该模块在其自己的全局变量中具有ngdp,并且您希望A.to_nominal利用B.ngdp

那是不可能的。全局作用域与定义函数的模块相关联;即使将函数导入到另一个模块中,它仍然会在原始模块的(A(范围内查找全局变量。

您需要在同一模块中定义全局和函数(最简单的方法(,或者以其他方式将它们绑定在一起(理想情况下不是通过循环导入,A导入ngdp,而B导入to_nominal,因为这很容易出错,因为所有都出来了(。如果它们不能在同一个模块中,简单地将ngdp作为参数传递给to_nominal将是一个合理的解决方案。