• 全局变量&局部变量,global&nonlocal


    ###全局变量与局部变量

    1、函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量,不管全局域中有没有用到该变量名,函数中使用的将是局部变量

     2、函数内部的变量名如果第一次出现,且出现在=后面,且该变量在全局域中已定义,则这里将引用全局变量,如果该变量在全局域中没有定义,当然会出现“变量未定义”的错误。

    3、函数中使用某个变量时,该变量名既有全局变量也有同名的局部变量,则会使用局部变量

    4、在函数中,如果想给全局变量赋值,则需要用关键字global生命

    NAME="yan" #重复变量命名时,需要规范,一眼就能够看得明白
    name="" def info(): global name#把该级当中的局域变量qiao设为全局变量. 若该级局域中没有变量,则该级局域中变量被赋予为全局变量yan 关键字:global name="qiao"#一级函数体中的局部变量 print(name) info()#函数体中,子程序内包含global所调用的是外置变量 print(NAME)#打印全局变量
    print(name)# 此时打印的是被global全局变量赋值为qiao
    输出结果:
    qiao
    yan
    qiao

    ###嵌套def函数

    ##nonlocal 赋予/被赋予, 该级局域中含有变量,就会出重新赋予上一级局部当中的变量,若该级局域中没有变量,就会被赋予上一级的局域变量)

    #这个例中的二级函数体中没有定义变量时出现nonlocal关键字时,该局域中就会被赋予上一级的变量

    name = "yan"
    def yanzi():
        name="yanzi"
        def lingyan():
            nonlocal name   #被赋予上一级变量yanzi
            #name="lingyan"  
            print(name)
    
        print(name)
        lingyan()#调用第二级自定义的函数
        
    print(name)
    yanzi() #调用一级自定义函数时直接输出局部变量
    
    打印结果为:
    yan
    yanzi
    yanzi

    ##二级函数中的变量与global的使用方法

    name = "yan"#1
    def yanzi():#2
        name="yanzi"#4.1
        def lingyan():#4.2  创建二级函数,函数体创建完成后在内存中储存,等待调用
            global name#4.21    把该局部中的变量赋予为全局变量lingyan,关键字global
            name="lingyan"#4.22  #二级函数体中的变量
    
        print(name)#4.3
        lingyan()#4.4  执行完一级函数体后,调用第二级自定义的函数
        
    print(name)#3   输出一级变量yan
    yanzi()#4    调用一级函数时直接输出该函数体当中的变量
    print(name)#5   此时的一级变量经过关键字global,更改后被重新赋值为lingyan
    '''
    打印结果为:
    yan
    yanzi
    lingyan
    '''
  • 相关阅读:
    U8g2库I2C总线再次突破性调试成功
    要学的东西太多了,还想学习opencv
    中断知识
    别人做的扫地机器人,有机会我也想搞一台!
    团队冲刺第五天
    第八周学习进度
    团队冲刺第四天
    构建之法1
    团队冲刺第三天
    团队冲刺第二天
  • 原文地址:https://www.cnblogs.com/zhiqiao/p/8693329.html
Copyright © 2020-2023  润新知