一、定义
全局变量:没有缩进,一般该变量名为全部大写,整个文件都可调用
局部变量:在程序里定义,子程序定义的变量,一般该变量名为小写命名
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更改为冷静
结果:
娜娜
沉着
冷静