About 2 min
1. 全局变量
a = 1
if a:
aa = 2
def f():
b = 1
if __name__ == '__main__":
c = 0
for i in range(10):
print(i)
if i == 5:
k = 10
print('global', i, k)
# global 9 10
j = 0
while j < 10:
if j == 9:
l = 10
j += 1
print('global', j, l)
# global 9 10
只要是在函数外面,都是全局变量,a,aa, c, i, k(甚至循环内的也是)
函数里面,则是局部变量,b.
2. 同名的局部变量和全局变量
a = 8
def f1():
# 只获取全局变量的值,可以
print('f1', a)
def f2():
'''
同名的局部变量的特殊之处:不论先后位置,只要有定义局部变量,函数任何位置都会屏蔽掉外面的全局变量。
也就是说在f2()运行到print('f2', a)时, 看不见外面的a, 而print('f2', a)之后a = 10才定义。
UnboundLocalError: cannot access local variable 'a' where it is not associated with a value
'''
print('f2', a)
a = 10
def f3():
'''
同理, 看不见外面的a, 从而想在定义中引用全局变量的值, 但实则引用的是未定义的局部变量
UnboundLocalError: cannot access local variable 'a' where it is not associated with a value
'''
a = a + 10
a += 10
print('f3', a)
def f4():
#
a = 10
print('f4', a)
def f5():
global a
print('f5', a)
a = 18
print('f5', a)
print(a) # 8
f1() # f1 8
# f2()
print(a) # 8
# f3()
f4() # f4 10
print(a) # 8
f5() # f5 8, f5 10
print(a) # 18
- 函数内部,可以直接访问全局变量的值,也可以定义局部变量来覆盖全局变量,但不可以修改(都会被视为未定义的局部变量)
- 值得注意,
f4()屏蔽了全局变量,局部变量怎么赋值、修改,都不会影响外面的全局变量。 - 可以使用
global关键字来修改全局变量。