全局變量的使用
# 代碼塊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
'''