- 局部变量:在函数中声明,在其他地方不可用、
- 全局变量:在外部声明,所有函数都可以用。
可变类型的全局变量:
- 对于不可变类型的全局变量来说,要在函数中修改需要global声明。
- 对于可变类型的全局变量来说,要在函数中修改可以不使用global声明。
即,当全局变量是string, int,tuple等不可变数据类型时,在函数重新定义赋值时要用global进行声明;当全局变量是list和dict等可变类型时,不用global声明也可以。
例1(不可变类型):
def test():
a = 2
print(a)
print(id(a))
a = 1
test()
print(a)
print(id(a))
'''输出:
2
140734691578720
1
140734691578688
'''
外部的a和内部的a不是一个值。id()代表地址,显然,两个a的地址也不同。
我们在函数内部global声明:
def test():
global a
a = 2
print(a)
print(id(a))
a = 1
test()
print(a)
print(id(a))
'''
输出:
2
140734691578720
2
140734691578720
'''
global声明后,内外a是一致的,地址也是一样的。
例2(可变类型):
def test(a):
a[0] = 2
print(a)
print(id(a))
a = [1, 1]
test(a)
print(a)
print(id(a))
'''
输出:
[2, 1]
3127152186056
[2, 1]
3127152186056
'''
列表a的值和地址都完全一样。