当前位置:  开发笔记 > 编程语言 > 正文

Python范围

如何解决《Python范围》经验,为你挑选了3个好方法。

我想弄清楚这个:

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

谢谢!



1> Greg Hewgill..:

在函数内,默认情况下,分配给的变量将被视为局部变量.要分配给全局变量,请使用以下global语句:

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

这是Python的一个古怪的领域,从来没有真正与我坐在一起.



2> ironfroggy..:

全局状态是需要避免的,特别是需要改变它.试想,如果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



3> Krzysiek Goj..:

勘误的格雷格的帖子:

引用它们之前应该没有.看一看:

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

它会爆炸,即使在引用后指定了x.在Python中,变量可以是本地的,也可以是引用外部范围,并且它不能在一个函数中更改.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有