函数内部的全局变量引用

时间:2020-06-26 04:27:06

标签: python

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

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

1 个答案:

答案 0 :(得分:0)

从您的描述中,听起来好像此函数是在模块A中定义的,并导入到另一个具有自己的全局变量B的模块ngdp中,您想要A.to_nominal来使用B.ngdp

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

您需要在同一模块中定义全局和函数(最简单的方法),或者以其他方式(最好是通过循环导入, not )将它们捆绑在一起,{ 1}}导入A,而ngdp导入B,因为这很容易出错,因为全部退出)。如果它们不能在同一个模块中,只需将to_nominal作为参数传递给ngdp将是一个合理的解决方案。

相关问题