规则命名以及基本介绍
1 name="LHF" # 顶头写的全局都可以调用的就是全局变量,命名规则要求大写全局变量
2 def chang_name():
3 # global name # 在函数内定义全局变量,之后函数内调用改变就会全局都改变,如果要用到此命令一定要在函数最前面用,不然会报错
4 name = "shuai" # 局部变量,值用于子程序所用,其他程序无法调用,命名规则要求全部小写
5 print("chang_name",name) # 优先取局部变量,局部取不到就取全局,在局部里面有的前提下,无法强制调用全局的
6 chang_name()
7 print(name) # 全局调用的时候只能调用全局的
内部改变全局变量的情况 global 的使用
函数和内存的交互原理,读取和执行
1 NAME = "yangtuo"
2 def chang_name (): # 强势理解函数被读取到内存后未执行,被调用后才会被执行
3 global NAME
4 NAME = "tiancai"
5 print(NAME)
6
7 print(NAME) # yangtuo 未调用函数时,不会改变
8
9 def chang_name1():
10 print(NAME)
11
12 chang_name1() # yangtuo 仍然未调用
13 chang_name() # yangtuo 仍然未调用
14 chang_name1() # tiancai 被调用后改变
15 print(NAME) # tiancai 被调用后改变,全局再次使用受影响
更改全局变量
1 name = "yangtuo"
2 def yang():
3 name = "yang"
4 def tuo():
5 global name
6 name = "tuo"
7 tuo()
8 print(name)
9
10 print(name)
11 yang()
12 print(name)
更改上一级变量
1 name = "yangtuo"
2 def yang():
3 name = "yang"
4 def tuo():
5 nonlocal name
6 name = "tuo"
7 tuo()
8 print(name)
9
10 print(name)
11 yang()
12 print(name)
总结:
全局变量最外圈 用全大写命名
局部变量在函数内 用全小写命名
局部变量与全局变量互不干涉。
函数调用不到局部变量会向上一级寻找直到找到最外层的全局变量
global 可以在函数内将全局变量更改
nolocal 可以在函数内对上一级的变量更改
ps : 想试验一下内部一个变量和外部重名的同时再宣告全局更改后,是先调用哪一个结果报错了
1 name = 123
2 def change_name():
3 name = 456
4 global name
5 name = 789
6 return name
7 print(name)
8 print(change_name())
9 print(name)
1 global name
2 ^
3 SyntaxError: name 'name' is assigned to before global declaration