python基础学习——全局变量与局部变量

一、定义

  全局变量:没有缩进,一般该变量名为全部大写,整个文件都可调用

  局部变量:在程序里定义,子程序定义的变量,一般该变量名为小写命名

  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.14.4)的name变量,沉着
print(name)                  #3——打印自己作用域范围内的变量,娜娜
name1()                     #4——执行函数name1
print(name)                 #5—打印当前作用域(1-5)的name变量,当前作用域的变量为全局变量,而全局变量已经有4.3.2更改为冷静


结果:
娜娜
沉着
冷静

猜你喜欢

转载自www.cnblogs.com/xucuiqing/p/11581655.html