深入理解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 testinif __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的地址不同,证明就是两个变量。