使用以下代码
def A():
print "in A"
def B():
global x
x += 1
y += 1
print "in B"
x = 0
y = 0
print x, y
B()
print x, y
if __name__ == '__main__':
A()
我得到了以下输出和错误
in A
0 0
NameError: global name 'x' is not defined
使用全球的正确方法是什么?实际上,我正在尝试更改子函数B中的x并将其返回到A.还尝试检查非全局y,并查看外部函数中发生的情况。
从Haidro提供的暗示中得到它
def A():
print "in A"
def B():
global x
x += 1
y = 1
print "in B"
global x
x = 0
y = 0
print x, y
B()
print x, y
答案 0 :(得分:2)
您还希望将global x
放入A()
:
def A():
print "in A"
def B():
global x
global y # Also, don't forget to globalise y!
x += 1
y += 1
print "in B"
global x
global y
x = 0
y = 0
print x, y
B()
print x, y
if __name__ == '__main__':
A()
您必须将global x
放入A()
,以便可以在B()
中访问它。但是,您仍需将global x
留在B()
,这样就无法获得UnboundLocalError: local variable 'x' referenced before assignment
您可能想要重新考虑您的结构。也许使用一个班级?
class MyClass(object):
def __init__(self):
self.x = 0
self.y = 0
def A(self):
print "in A"
print self.x, self.y
self.B()
print self.x, self.y
def B(self):
self.x += 1
self.y += 1
print "in B"
me = MyClass() # Create an instance of the class
me.A()
me.B()
print me.x, me.y
返回:
in A
0 0
in B
1 1
in B
2 2
答案 1 :(得分:1)
你有可能不想使用全局变量。一般来说,它们只应在绝对必要时使用。我认为这是你想要实现的目标:
def A():
print "in A"
x = 5
def B(x):
print "in B"
return x
print B(x)
if __name__ == '__main__':
A()