深入理解Python变量的作用域
1、打开Python开发工具IDLE,新建‘zuoyongyu.py’文件,并编写代码如下:
def test():
a = 'a'
print (a)
if __name__ == '__main__':
test()
print (a)
2、F5运行代码,先执行了test函数打印出变量a,后报错,因为a在函数里定义,作用域只在函数内,在函数外使用会报错,a就是通常说的局部变量。
3、将变量a的定义放到函数外,代码如下:
a = 'a'
def test():
print (a)
if __name__ == '__main__':
test()
print (a)
4、F5运行代码,打印了两次变量a的值,是因为a是全局变量,在函数体外定义,作用域是整个文件内。
5、嵌套函数变量作用域,外层函数定义的变量在内层有效,外层函数执行完后,变量才被释放,修改代码如下:
def test():
a = 'a'
print (a)
def testin():
print (a)
return testin
if __name__ == '__main__':
tw = test()
tw()
6、F5运行代码,可以发现变量a的值被打印的两次,说明内层函数执行时同样可以访问到外层的变量a
7、再次修改代码,测试函数体内修改全局变量,代码如下:
a = 'a'
def test():
a = 'abc'
print (a)
if __name__ == '__main__':
test()
print (a)
8、F5运行代码,可以发现变量a的值被打印的两次,两次值不同,函数内改变同名全局变量的值,并不影响全局变量本来的值,因为根本就是两个变量。
9、为验证上一步的观点,打印出变量a的地址修改代码如下:
a = 'a'
def test():
a = 'abc'
print (id(a))
if __name__ == '__main__':
test()
print (id(a))
10、F5运行代码,可以发现变量a的地址不同,证明就是两个变量。