zoukankan      html  css  js  c++  java
  • python-局部变量与全局变量作用域

    局部变量

    • 局部变量,就是在函数内部定义的变量
    • 其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
    • 因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同名字的局部变量(打个比方,把你、我是当做成函数,把局部变量理解为每个人手里的手机,你可有个iPhone8,我当然也可以有个iPhone8了, 互不相关)
    • 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
    • 当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够使用了
    def my_func1():
        # 局部变量的作用域(使用范围)在函数的内部 函数的外部无法使用
        num = 10  # 定义一个局部变量
        print(num)
    # 调用函数
    my_func1()  # 10
    # 再定义一个函数
    def my_func2():
        # 定义一个局部变量
        num = 10
        print(num)
    # 在函数内部定义的局部变量名可以和其他函数中的局部变量名相同 是不冲突的
    my_func2()  # 10

    全局变量

    如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量

    打个比方:有2个兄弟 各自都有手机,各自有自己的小秘密在手机里,不让另外一方使用(可以理解为局部变量);但是家里的电话是2个兄弟都可以随便使用的(可以理解为全局变量)

    • 在函数外边定义的变量叫做全局变量
    • 全局变量能够在所有的函数中进行访问
    # 全局变量 或者 变量(作用域是在整个模块内使用)
    num = 10
    # 分别在两个函数内部使用了全局变量
    def my_func1():
        print("my_func1", num)
    def my_func2():
        print("my_func2", num)
    print("函数外面", num)  # 函数外面 10
    my_func1()  # my_func1 10
    my_func2()  # my_func2 10

    全局与局部变量
    在子程序(即函数)中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

    num = 10
    def my_func1():
        # 在函数内部如果使用一个变量 他先从函数内部找 如果有直接使用
        # 如果函数内部没有找到 会到函数外面找(全局变量)
        # 如果还是没有找到 就报错
        num = 20  # 其实是定义了一个和全局变量名相同的局部变量
        print("my_func1", num)
    my_func1()  # my_func1 20
    print("外面", num)  # 外面 10
    num = 10
    def my_func1():
        # 标识这函数内部不是定义一个局部变量 其实是对全局变量的进行修改
        global num
        # 对全局变量的值进行修改
        num = 20
        print("my_func1", num)
    my_func1()  # my_func1 20
    print("外面", num)  #外面 20

    当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

    • 当函数内出现局部变量和全局变量相同名字时,函数内部中的 变量名 = 数据 此时理解为定义了一个局部变量,而不是修改全局变量的值
    • 如果在函数中出现global 全局变量的名字 那么这个函数中即使出现和全局变量名相同的变量名 = 数据 也理解为对全局变量进行修改,而不是定义局部变量
    • 如果在一个函数中需要对多个全局变量进行修改,那么可以使用global a, b

    school = "oldboy edu." 
    def change_name(name):
        school = "Mage Linux"
        print("before change",name,school)
        name = "Alex Li"   #这个函数就是这个变量的作用域
        print("after change",name)
    name = "alex"
    change_name(name)
    print(name)
    print(school)   #显示:oldboy edu.
    school = "oldboy edu."   #全局变量
    def change_name(name):
        global school   #在局部变量中改全局变量,用global
        school = "Mage Linux"
        print("before change",name,school)
        name = "Alex Li"   #这个函数就是这个变量的作用域
        print("after change",name)
    print(school)   #函数调用之前,显示:oldboy edu.
    name = "alex"
    change_name(name)
    print(name)
    print(school)   #函数调用之后,显示:Mage Linux
    def change_name():
        global name  #外面没有这个全局变量,里面定义,最好不要用!!
        name = "alex"
    change_name()
    print(name)
    names = ["Alex","Jack","Rain"]
    def change_name():
        names[0]="金角大王"   #除了字符串和整数,列表、字典、集合、类是可以在局部中改全局变量
        print("inside func",names)
    change_name()
    print(names)
  • 相关阅读:
    JStorm集群的安装和使用
    Kafka集群的安装和使用
    Linux下which、whereis、locate、find 命令的区别
    Linux 命令小记
    Linux 普通进程 后台进程 守护进程
    Java 命令行运行参数大全
    一台机子上运行使用不同Java版本的多个tomcat
    Ubuntu 设置程序开机启动(以指定用户身份)
    linux 开机启动过程详解
    关于Linux发行版的选择
  • 原文地址:https://www.cnblogs.com/peiya/p/11988909.html
Copyright © 2011-2022 走看看