一、定义
全局变量:没有缩进,一般该变量名为全部大写,整个文件都可调用
局部变量:在程序里定义,子程序定义的变量,一般该变量名为小写命名
1)函数中无global时,优先读取局部变量,能读取全局变量,无法对全局变量重新赋值,但对于可变类型,可以对其内部元素进行操作
2)如果有global时,变量本质就是全局变量,可以读取可以赋值
3)函数与函数之间可嵌套
4)解释器从上到下运行,遇到函数只编译不执行
5)找变量时,先从自己当前作用域开始查找
二、各种场景样例
global全局变量、nonlocal上一级变量
name=["娜娜","丽丽"] def change_name(): global name name="cc" print("我的名字",name) def name1(): name.append("QQ") print("她的名字",name) name1() #先执行 change_name() #后执行 结果: 她的名字 ['娜娜', '丽丽', 'QQ'] 我的名字 cc
2.1 多个函数时,同级函数从上而下执行
方式一:先执行change_name函数,再执行name1函数 name=["娜娜","丽丽"] def change_name(): global name name="cc" print("我的名字",name) def name1(): # name.append("QQ") print("她的名字",name) change_name() name1() 结果: 我的名字 cc 她的名字 cc 方式二:方式一:先执行name1函数,再执行change_name函数 name=["娜娜","丽丽"] def change_name(): global name name="cc" print("我的名字",name) def name1(): # name.append("QQ") print("她的名字",name) name1() change_name() 结果: 她的名字 ['娜娜', '丽丽'] 我的名字 cc
2.2 函数嵌套
name="AA" def name1(): name="BB" def name2(): global name name="CC" name2() print(name) print(name) name1() print(name) 结果:从上而下,先函数内部寻找局部变量,再外网找全局变量 AA BB CC
2.2 多层级def嵌套
NAME="海风" def huangwei(): name="黄伟" print(name) def liuyang(): name="刘洋" print(name) def nulige(): name="沪指花" print(name) print(name) nulige() liuyang() print(name) huangwei() 结果: 黄伟 刘洋 刘洋 沪指花 黄伟
2.3 nonlocal 指定上一级变量
name="AA" def name1(): name="BB" def name2(): nonlocal name #指定上一级变量 name="CC" name2() print(name) print(name) name1() print(name) 结果: AA CC AA
三、风湿理论:函数即变量
name="娜娜" #1 def name1(): #2 内存中加载name1 name="沉着" #4.1 def name2(): #4.2内存中加载name2 global name #4.3.1 使用全局变量 name="冷静" #4.3.2 更改全局变量为冷静 name2() #4.3执行函数name2 print(name) #4.4打印当前作用域内(4.1—4.4)的name变量,沉着 print(name) #3——打印自己作用域范围内的变量,娜娜 name1() #4——执行函数name1 print(name) #5—打印当前作用域(1-5)的name变量,当前作用域的变量为全局变量,而全局变量已经有4.3.2更改为冷静 结果: 娜娜 沉着 冷静