zoukankan      html  css  js  c++  java
  • Python老男孩 day15 函数(二) 局部变量与全局变量

    https://www.cnblogs.com/linhaifeng/articles/6113086.html

    ——————————————————————————————————————

    五、局部变量与全局变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
    当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

    name='lhf'
    
    def change_name():
        print('我的名字',name)
    
    change_name()

    运行结果:
    我的名字 lhf

    def change_name():
        name='帅了一笔'
        print('我的名字',name)
    
    change_name()
    print(name)

    运行结果:
    我的名字 帅了一笔
    lhf

    def change_name():
        global name
        name='帅了一笔'
        print('我的名字',name)
    
    change_name()
    print(name)


    运行结果:
    我的名字 帅了一笔
    帅了一笔

    NAME = "产品经理"
    
    def yangjian():
        global NAME # 已经声明,NAME就是全局的的那个变量
        print('我要搞', NAME)
        NAME = "小东北"  # 修改 全局的变量
        print('我要搞', NAME)
    
    yangjian()

     运行结果:

    我要搞 产品经理
    我要搞 小东北

    #如果函数的内容无global关键字
    -有声明局部变量

    NAME = ["产品经理","廖波湿"]
    def qupengfei():
        NAME = "自己"
        print('我要搞', NAME)
    qupengfei()

    运行结果:
    我要搞 自己

    -无声明局部变量

    NAME = ["产品经理", "廖波湿"]
    
    def qupengfei():
        NAME.append('XXOO')
        print('我要搞', NAME)
    
    qupengfei()


    运行结果:
    我要搞 ['产品经理', '廖波湿', 'XXOO']

    #如果函数中有global关键字

    -有声明局部变量

    NAME = ["产品经理","廖波湿"]
    def qupengfei():
        NAME = "自己"
        global NAME
        print('我要搞', NAME)
    qupengfei()

    运行结果:
    报错
    SyntaxError: name 'NAME' is assigned to before global declaration


    -无声明局部变量

    NAME = ["产品经理","廖波湿"]
    def qupengfei():
        global NAME
        NAME = ["阿毛"]
        NAME.append('XXOO')
        print('我要搞', NAME)
    qupengfei()

     运行结果:

    我要搞 ['阿毛', 'XXOO']


    *** 全局变量变量名大写
    *** 局部变量变量名小写

    #优先读取局部变量,若无则只能读取全局变量,无法对全局变量重新赋值
    #但是对于可变类型,可以对内部元素进行操作
    #如果函数中有global关键字,变量本质上就是全局变量,可读取可赋值 NAME='fff'

    NAME = '海风'
    
    def huangwei():
        name = "黄伟"
        print(name)
        def liuyang():
            name = "刘洋"
            print(name)
            def nulige():
                name = '沪指花'
                print(name)
            print(name)
            nulige()
        liuyang()
        print(name)
    
    huangwei()

    运行结果:
    黄伟
    刘洋
    刘洋
    沪指花
    黄伟

    解题思路:

    name = "刚娘"
    
    def weihou():
        name = "陈卓"
        def weiweihou():
            global name     #获取的是全局的name,并没有改变weihou()内的name = "陈卓"
            name = "冷静"
    
        weiweihou()
        print(name)     #所以输出 陈卓
    
    print(name)
    weihou()
    print(name)

    运行结果:
    刚娘
    陈卓
    冷静

    name = "刚娘"
    
    def weihou():
        name = "陈卓"
        def weiweihou():
            nonlocal name   # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
            name = "冷静"
    
        weiweihou()
        print(name)
    
    print(name)
    weihou()
    print(name)

    运行结果:
    刚娘
    冷静
    刚娘

  • 相关阅读:
    TCPUDPSocket调试工具v2.2
    C#高性能Socket服务器IOCP实现
    c#使用HttpListener监听HTTP请求
    Winform Socket通信
    C# 方法中的this参数(扩展方法)
    C# 两种方法实现HTTP协议迷你服务器
    C#访问HTTP请求
    Socket通信原理
    C#数据decimal保留两位小数
    单机网站架构云化后架构图
  • 原文地址:https://www.cnblogs.com/zhuhemin/p/9099571.html
Copyright © 2011-2022 走看看