• 2018.12.11——全局变量与局部变量


    一、局部变量与全局变量

    1. 例子:

    name='lhf'
    def yangjian():
        global name
        name='东方今典'
        print('我要',name)
    def shizhengwen ():
        global name
        name='sssssss'
        print('我要',name)
    yangjian()
    shizhengwen()

    输出结果:

    2.如果将上述代码yangjian()和shizhengwen()

    颠倒顺序:

    name='lhf'
    def yangjian():
        global name
        name='东方今典'
        print('我要',name)
    def shizhengwen ():
        print('我要',name)
    
    shizhengwen()
    
    yangjian()

    则根据“从上到下”的执行顺序,输出结果为:

     3.总结例子:

    例1:

    name='产品经理'
    def yangjian():
        global name  #已经声明name=产品经理 是全局变量
        print('我要搞',name)
        name='小东北'  #修改全局变量为小东北
        print('我要搞',name)
    def shizhengwen ():
        name='史政文'
        
        print('我要搞',name)
    yangjian()
    shizhengwen()
    
    #输出结果:
    #我要搞 产品经理
    #我要搞 小东北
    #我要搞 史政文
    
    #
    如果函数的内容里面没有global关键字,优先读取里面的的局部变量,如果没有局部变量则只能读取全局变量。而且无法对全局变量进行赋值操作(如:name='史珍香'),
    但是对于可变对象(如列表),
    则可以对其内部元素进行操作,如(.append)
    #如果函数里面有global关键字,那么后面的name本质上就是全局变量,可以读取,可以赋值

     例2:

    如果函数的内容里面没有global关键字,优先读取里面的的局部变量,如果没有局部变量则只能读取全局变量。而且无法对全局变量进行赋值操作(如:name='史珍香'),
    但是对于可变对象(如列表),则可以对其内部元素进行操作(如.append)
    name=['产品经理','廖博士']
    def qupengfei():
        name.append('田振龙')
        print('我要搞',name)
    qupengfei()

    输出结果:


    二、全局变量、局部变量与函数的嵌套:
    例1:
    name='海风'
    def huangwei():
        name='黄伟'
        print(name)
        def liuyang ():
            name='刘洋'
            print(name)
            def nulige():
                name='沪指花'
                print(name)
            print(name)
            nulige()
        liuyang()
        print(name)
    
    
    huangwei()
    
    #输出结果:
    #黄伟
    #刘洋
    #刘洋
    #沪指花
    #黄伟

    解析:!!!!!

     例2:

    name='刚娘'
    def weihou():
        name='陈卓'
        def weiweihou():
            global name
            name='冷静'
        weiweihou()
        print(name)
    print(name)
    weihou()
    print(name)

    获得结果:刚娘,陈卓,冷静

    例3:引入nonlocal ——代指上一级的变量:

    name='刚娘'
    def weihou():
        name='陈卓'
        def weiweihou():
            nonlocal  name  ####
            name='冷静'
        weiweihou()
        print(name)
    print(name)
    weihou()
    print(name)

    输出结果:刚娘,冷静,刚娘

    三、简单的复习:

    1.

    name='alex'
    def change_name():
        global name
        name='lhf'
        print(name)
    
    #输出结果:输出不了结果,但是不报错

    2.

    name='alex'
    def change_name():
        global name
        name='lhf'
        print(name)
        
    change_name()
    
    #输出结果:lhf

    3.

    name='alex'
    def change_name():
        global name
        name='lhf'
        print(name)
        def foo():
            name='wu'
            print(name)
        foo()
        
    change_name()
    
    
    #输出结果:lhf  
    #         wu

    4.

    name='alex'
    def change_name():
        global name
        name='lhf'
        print(name)
        def foo():
            # name='wu'
            print(name)
        foo()
        
    change_name()
    
    #输出结果:lhf
    #         lhf

    在例4中,当foo执行的时候,发现自己的作用域之中没有name,于是按照顺序向上借name,离他最近的name就是change_name函数的作用域里面的规定的global name ‘lhf’,于是第二个打印的就是lhf!!!!

    5.

    name='alex'
    def change_name():
        # global name
        # name='lhf'
        # print(name)
        
        def foo():
            # name='wu'
            print(name)
        foo()
        
    change_name()
    
    #输出结果:alex

    6.

    name='alex'
    def change_name():
        # global name
        # name='lhf'
        # print(name)
        name='aaa'
        def foo():
            # name='wu'
            print(name)
        foo()
        
    change_name()
    
    #输出结果:aaa

     7.

    name='alex'
    def change_name():
        # global name
        # name='lhf'
        # print(name)
        name='aaa'
        def foo():
            # name='wu'
            nonlocal name
            print(name)
        foo()
        
    change_name()
    
    #输出结果:aaa

     8.

    name='alex'
    def change_name():
        # global name
        # name='lhf'
        # print(name)
        name='aaa'
        def foo():
            # name='wu'
            nonlocal name
            name='bbb'
            print(name)
        foo()
        
    change_name()
    
    #输出结果:bbb

    9.

    name='alex'
    def change_name():
        # global name
        # name='lhf'
        # print(name)
        name='aaa'
        def foo():
            # name='wu'
            nonlocal name
            name='bbb'
            print(name)
        foo()
        print(name)
        
    change_name()
    
    #输出结果:bbb
    #        bbb
  • 相关阅读:
    C#规范整理·异常与自定义异常
    C#规范整理·资源管理和序列化
    C#规范整理·泛型委托事件
    C#规范整理·集合和Linq
    <抽象工厂>比<工厂方法>多了啥(区别)
    <工厂方法>比<简单工厂>多了啥(区别)
    Unable to start Ocelot because either a ReRoute or GlobalConfiguration
    MySQL服务安装
    mysql登录报错“Access denied for user 'root'@'localhost' (using password: YES”)的处理方法
    使用博客系统发生_STORAGE_WRITE_ERROR_错误
  • 原文地址:https://www.cnblogs.com/lijialun/p/10104790.html
Copyright © 2020-2023  润新知