day10 局部变量 全局变量 作用域前奏


规则命名以及基本介绍
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






原文地址:https://www.cnblogs.com/shijieli/p/9687586.html