Python方法中未解决的参考

时间:2018-06-18 12:08:06

标签: python python-3.x

我试图找到这个错误的原因。守则

def x():
    if b == 1:
        a = a + 4
        print(a)
a = 5
b = 1 

x()

第二次使用我的变量aa = a + 4,发生错误。

我正在开发一个主要使用此类作业的程序。

1 个答案:

答案 0 :(得分:6)

作业a = a + 4告诉翻译人员使用a的本地版本而不是全局参考。

现在在赋值a = a + 4中,当解释器查找局部变量a的值时,解释器会发现变量未定义并将生成UnboundLocalError: local variable 'a' referenced before assignment

您可以使用global关键字更改此行为:

def x():
    global a
    if b == 1:
        a = a + 4
        print(a)
        return
a = 5
b = 1
x()

问:坚持,为什么翻译人员抱怨b

答:因为您未在函数中分配任何内容 b ,因此解释程序将使用变量{{ 1}}来自全球范围。

但是,这种情况不需要全局变量。避免全局变量的更优雅的版本是:

b

请注意,此功能的行为略有不同。您的原始函数未返回任何内容,而我的def x(a, b): if b == 1: a = a + 4 return a print( x(5, 1) ) 的返工版本将始终返回x的值,无论是已修改还是未修改,具体取决于a的值。

这样做的好处是可以使用返回的值,并且可以将b移出函数。