全局变量在函数内部的修改
接下来,先看两个例子:
例子一:
g_num = 0 def test1(): global g_num g_num += 10 print("test1后 g_num为:%d" % g_num) def test2(): g_num = 0 g_num += 20 print("在test2里 g_num为:%d" % g_num) def main(): print("未执行程序之前 g_num为:%d" % g_num) test1() test2() print("未执行程序之后 g_num为:%d" % g_num) if __name__ == '__main__': main()
以上程序,在test1中声名全局变量,然后修改全局变量后,最终全局变量的修改生效
而在test2中,并没有修改全局变量,所以此时g_num为局部变量,仅仅在test2中生效。
例子二:
g_list=[1,2] def test1(): g_list.append(10) print("经过test1后 g_list为:%s"%g_list) def test2(): g_list.insert(2,15) print("经过test2后 g_list为:%s"%g_list) def main(): test1() test2() print(g_list) if __name__ == '__main__': main()
有没有发现,用了列表就不需要用global声名全局变量,而且可以直接修改全局变量
因此 全局变量在函数内部修改,是否需要global声名,要看是否对全局变量的指向做出了修改,如果修改了全局变量的指向,就必须使用global,如果涉及不到修改变量的指向,则不需要使用global声名