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)
  • 相关阅读:
    171 01 Android 零基础入门 03 Java常用工具类02 Java包装类 01 包装类简介 01 Java包装类内容简介
    170 01 Android 零基础入门 03 Java常用工具类01 Java异常 08 Java异常总结 01 异常总结
    169 01 Android 零基础入门 03 Java常用工具类01 Java异常 07 异常链 01 异常链简介
    168 01 Android 零基础入门 03 Java常用工具类01 Java异常 06 自定义异常 01 自定义异常类
    167 01 Android 零基础入门 03 Java常用工具类01 Java异常 05 使用throw和throws实现异常处理 02 使用throw抛出异常对象
    166 01 Android 零基础入门 03 Java常用工具类01 Java异常 05 使用throw和throws实现异常处理 01 使用throws声明异常类型
    165 01 Android 零基础入门 03 Java常用工具类01 Java异常 04 使用try…catch…finally实现异常处理 05 return关键字在异常处理中的使用
    DevExpress WPF v20.2版本亮点放送:全新升级的PDF Viewer
    界面控件DevExpress使用教程:Dashboard – 自定义导出
    DevExpress WinForms帮助文档:表单控件
  • 原文地址:https://www.cnblogs.com/peiya/p/11988909.html
Copyright © 2011-2022 走看看