全局变量的使用
# 代码块1
a = 10
def foo():
a = 2
foo()
print(a) # 10
---------------
# 代码块2
a = 10
def foo():
global a
a += 1
foo()
print(a) # 3
----------------
# 然后将代码块2用一个函数封装起来时,错误发生了:
def f1():
a = 10
def foo():
global a
print(a) # NameError: name 'a' is not defined
foo()
f1()
# 但是,将global a 注释掉后:
def f1():
a = 10
def foo():
# global a
print(a) # 10
foo()
f1()
# 但是,不能修改a,修改的话会报错:
def f1():
a = 10
def foo():
# global a
print(a) # UnboundLocalError: local variable 'a' referenced before assignment
a += 1
print(a)
foo()
f1()
-----------------
# 解决方法
def f1():
global a
a = 10
def foo():
global a
a += 1
print(a) # 11
foo()
f1()
变量作用域问题
# 示例1
class Solution(object):
def VariableScope(self):
a = 10 # a的作用域是整个VariableScope,但如果有重名的局部变量,此处的a会被屏蔽掉
def visit():
print('visit:', a) # 可以访问,但只具有可读权限,如果强行修改,会出现下面的bug。
# 如果加上下面这两句代码,
# 会报UnboundLocalError: local variable 'len_n' referenced before assignment
# a += 1
# print('visit:',a)
def visit2():
a = 20
print('visit2:', a)
visit()
visit2()
print('VariableScope:', a) # a的作用域是整个VariableScope,但如果有重名的局部变量,此处的a会被屏蔽掉
return
s = Solution()
s.VariableScope()
'''
visit: 10
visit2: 20
VariableScope: 10
'''