蟒范围[重复](Python scope [duplicate])

2019-07-19 02:45发布

这个问题已经在这里有一个答案:

  • 不明白为什么会发生UnboundLocalError [复制] 8个回答

我想弄清楚这一点:

c = 1
def f(n):
    print c + n 
def g(n):
    c = c + n

f(1) => 2
g(1) => UnboundLocalError: local variable 'c' referenced before assignment

谢谢!

Answer 1:

在函数中,被分配变量被视为默认局部变量。 要分配给全局变量,使用global语句:

def g(n):
    global c
    c = c + n

这是Python的古怪领域从未真正与我坐井之一。



Answer 2:

全球状态的东西,以避免,尤其是需要发生变异它。 考虑如果g()应该简单地采取两个参数,或者如果f()g()需要与一个共同的类的方法c实例属性

class A:
    c = 1
    def f(self, n):
        print self.c + n
    def g(self, n):
        self.c += n

a = A()
a.f(1)
a.g(1)
a.f(1)

输出:

2
3


Answer 3:

勘误Greg的帖子 :

应该没有 。 看一看:

 x = 1 def explode(): print x # raises UnboundLocalError here x = 2 

它爆炸,即使它引用在x分配。 在Python变量可以是本地的或参考范围外,并且它不能在一个函数而改变。



Answer 4:

除了什么格雷格说,在Python 3.0,就会有外地语句来陈述“这里是在封闭范围中定义的一些名字”。 与全球那些名字必须在当前范围之外已定义。 这将是很容易追查名和变量。 现在你不能确定,其中“全局的东西”的精确定义。



文章来源: Python scope [duplicate]
标签: python scope