使用相同的变量名称本地化模块范围变量

时间:2018-04-22 09:20:56

标签: python

我尝试将模块范围的变量本地化到模块中的定义,但是我得到UnboundLocalError并且与提出错误的原因相混淆。例如,以下代码在模块test.py

中实现
# implementation 1
a=5
def geta():
    a=a
    return a

导入并运行:

>>> import test
>>> test.geta()

Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
    test.geta()
File "test.py", line 3, in geta
    a = a
UnboundLocalError: local variable 'a' referenced before assignment

但以下方法有效。 第一个是定义输入变量a的默认值:

# implementation 2
a=5
def geta(a=a):
    return a # return 5

第二个是在定义中使用不同的名称:

# implementation 3
a=5
def geta():
    b=a
    return b # return 5

为什么我无法使用具有相同名称的实施1 本地化变量a?为什么它会在实施1 中引发错误referenced before assignment,但在实施3 中有效?

1 个答案:

答案 0 :(得分:0)

Aggregate(

     PeriodsToDate( 
           [Date].[Calendar Hierarchy].[Year],
           [Date].[Calendar Hierarchy].CurrentMember 
     ),
     [Measures].[Sales]
 )

你必须制作一个全局变量