全局变量:作用域为整个pytion文件,都可调用,为大家的公共情人。a.不使用global的时候本身第一层不能被修改,若为list,dict等可变类型,内部元素可以修改,增加。b.使用global,想怎么改就怎么改。
局部变量:在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则会报错。包括子函数和传入的参数
1.优先寻找局部变量,若本层不存在则寻找上一层的变量,本层的命令不会执行到往下一层函数的变量
#内部函数的变量不会执行 name=\'lyf\' def test(): name ="wpq" def test_1(): name="ss" def test_1_1(): name="bb" #test_1_1没被执行,name="bb"不会执行 print(name) test_1() test() print(name)
name=\'lyf\' def test(): name="wpq" def test_1(): def test_1_1(): name="bb" print(name)#本层不存在name,寻找上一层name打印 test_1() test() print(name)
2.函数内修改全局变量用global,global+变量,和变量赋值必须分两行,写在一起会报错
name=\'lyf\' def test(): global name name="wpq" def test_1(): name="ss" def test_1_1(): name="bb" #test_1_1没被执行,name="bb"不会执行 print(name) test_1() test() print(name)
在函数内部,globel修改后,全局变量就被修改,后面其它函数调用的global都是修改后的变量
name = \'lyf\' def test(): global name name = "wpq" print(name) def test_1(): print(name)#test先执行,全局变量已经被修改,后执行test——1,输出的是修改后的变量 test() test_1()
3.函数内不使用golbal,修改list,dict的元素
注意:list,dict本身不能被修改
name = [\'lyf\',1] dict_1={1:"a",2:"b"} def test(): name.append("aa") dict_1.update({3:"cc"}) test() print(name) print(dict_1)
4.为了区分全局变量和局部变量,一般全局变量字母大写,局部变量字母小写。
nonlocal——指定上一级变量