python中变量的作用域

1. python作用域类型

  1)函数中的局部作用域:local

  2)嵌套函数中父级函数的局部作用域:enclosing

  3)全局作用域:global

  4)系统内置的变量:如 int、str、list 等关键字

  变量的查找顺序为:局部作用域 > 父级函数作用域 > 当前模块全局作用域 > 系统内置作用域

 

2. 函数体内部对外部变量的引用

  1)获取变量

   函数内部可直接获取外部定义的变量

# 直接获取变量,此时打印结果为:a = 0
a = 0
 
def func1():    
     print(a)

   如下所示,函数内再定义一个重名的变量,会优先引用局部作用域内的变量,并不会引用到全局变量

# 函数内再声明一个变量a,并赋值,此时函数内部打印的结果为:a = 1,函数外部打印的结果为:a = 0
a = 0

def func2():
    a = 1
    print(a)
print(a)

 

  2)修改全局变量

   要想在函数内部对全局变量进行修改,需要使用 global 声明函数体内的这个变量是全局变量

# 用global声明这是一个全局变量,此时打印结果为:a = 1
a = 0

def func3():
    global a
    a = 1
    print(a)

 

  3)修改父级函数定义的局部变量

    先来看一个错误案例

复制代码
# 这是一个装饰器,可以简单先理解为是一个嵌套函数,在父级函数中定义了变量 a,然后在最内层函数中修改 a 的值
def func_error(func):
    a = 5
    def wrapper():
        func()
        a = a + 1
        print(a)
    return wrapper

@func_error
def error_demo():
    pass

error_demo()
复制代码

   执行后报错:UnboundLocalError: local variable 'a' referenced before assignment

   

   原因是在wrapper函数内,没有找到局部变量 a,父级函数中定义的变量作用域只在父级函数的局部作用域

   如果想要使用,则需要在wrapper内使用 nonlocal 来声明这是一个外层非全局的变量

  

 

posted @   二鬼  阅读(1925)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示