• python笔记-变量的作用域


    一、python变量的作用域

    python中, 所有变量并不是在哪个位置都可以访问的。访问权限取决于这个变量是在哪里赋值的。
    变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称

    1. 全局变量: 定义在函数外部的变量
      • 在函数内部, 可以访问全局变量, 不能进行修改
    2. 局部变量: 定义在函数内部的变量
      • 只能在函数内部访问, 在函数外部不能访问
    num = 0  # 全局变量
    
    def sum(arg1, arg2):
        # 返回两个参数的和
        num = arg1 + arg2  # num在这里是局部变量
        print('局部变量:', num)
        return num
    
    sum(10, 5)
    print('全局变量:', num)
    

    python中的4种作用域
    按照从上到下依次对变量进行搜索

    1. 局部作用域
    2. 嵌套的父级函数的局部作用域(闭包外层函数作用域)
    3. 全局作用域
    4. 内建作用域

    二、python作用域的产生

    1. 模块(modules)
    2. 类(class)
    3. 函数(def, lambda)

    以上三类才会引入新的作用域
    其它的代码块(如if、try、for等)是不会引入新的作用域的

    三、修改不同作用域变量的值

    1. 局部作用域修改全局作用域(global)
    global_int = 10   # 全局变量
    
    
    def fun():
        global global_int
        print("函数内部未修改前", global_int)  # 未修改前
        global_int += 10
        print("函数内部修改后", global_int)
    
        
    print("函数外部未执行函数fun", global_int)
    fun()
    print("函数外部执行函数fun", global_int)
    

    运行结果:
    函数外部未执行函数fun 10
    函数内部未修改前 10
    函数内部修改后 20
    函数外部执行函数fun 20

    • global: 声明全局变量,要对函数外部变量进行修改时, 就可以使用global声明要修改的变量
    1. 外层作用为非全局作用域(nonlocal)
    def func_test():
        test_var = 10
    
        def test():
            nonlocal test_var
            print(f"内层函数test未修改: test_var:{test_var}")
            test_var += 10
            print(f"内层函数test修改后: test_var:{test_var}")
    
        print(f"外层函数func_test未执行内层函数test: test_var:{test_var}")
        test()
        print(f"外层函数func_test执行内层函数test: test_var:{test_var}")
    
    func_test()
    

    执行结果:
    外层函数func_test未执行内层函数test: test_var:10
    内层函数test未修改: test_var:10
    内层函数test修改后: test_var:20
    外层函数func_test执行内层函数test: test_var:20

    • nonlocal: 嵌套作用域中, 内层作用域要修改外层作用域的变量时, 使用nonlocal关键字声明局部变量
  • 相关阅读:
    vue a标签下载图片文档显示下载失败
    20200331
    拿奖不排队——项目系统设计与数据库设计
    重修信息管理系统——需求说明书
    拿奖不排队--项目需求分析
    《重修信息系统》项目需求分析模型
    2020软件工程作业--团队02
    拿奖不排队 ——团队展示
    PHP POST请求同时获取结果和header信息
    Peer reports incompatible or unsupported protocol version.
  • 原文地址:https://www.cnblogs.com/duyupeng/p/13138369.html
Copyright © 2020-2023  润新知