07.python函数作用域global、nonlocal、LEGB

总结,global的使用原则在于明确变量所属的作用域,而非直接在局部作用域中定义。闭包概念出现在嵌套函数中,内层函数引用了外层函数的自由变量,形成闭包。Python中的闭包实现方式包括使用global或nonlocal关键字。非局部变量使用nonlocal关键字,用于引用上级作用域中的变量,而非当前作用域。例如,count是外层...
07.python函数作用域global、nonlocal、LEGB
一个标识符的作用域,指的是该标识符的可见范围,通常指变量的作用域。例如,变量x在函数内部不可见,会抛出异常(NameError: name 'x' is not defined),因为函数具有其独立的作用域,变量x被限制在该作用域内。

在函数嵌套结构中,内部函数inner无法在外部直接访问,会抛出NameError异常,因为它在外部作用域不可见。其实,inner是outer函数内部定义的变量。

当探讨嵌套结构的作用域时,可以观察到在不同层级作用域中的变量可见性。通过对比执行结果,我们可以清晰地看到变量的作用域范围。

对于一个赋值语句问题,我们观察到函数2返回错误指向x += 1。问题在于,函数内部的局部变量x与外部全局变量x混淆,导致错误。解决此常见问题的关键在于明确变量的作用域。

使用global语句定义的变量,即使在foo函数中声明,也能指示当前函数作用域使用外部全局作用域中的x。在foo中再写x = 10并不会定义局部变量x,而是保持全局变量的引用。因此,使用global将foo中的x转变为全局变量。

总结,global的使用原则在于明确变量所属的作用域,而非直接在局部作用域中定义。闭包概念出现在嵌套函数中,内层函数引用了外层函数的自由变量,形成闭包。Python中的闭包实现方式包括使用global或nonlocal关键字。

非局部变量使用nonlocal关键字,用于引用上级作用域中的变量,而非当前作用域。例如,count是外层函数的局部变量,被内部函数引用,通过nonlocal声明count在上级作用域而非当前作用域中定义。

函数销毁的机制在于定义函数生成函数对象,其引用计数管理其生命周期。使用del语句或覆盖同名标识符均可减少引用计数。Python程序结束时,所有对象销毁,函数对象也不例外,其销毁取决于引用计数是否减为0。

变量名解析遵循LEGB原则,即Local、Enclosing、Global和Built-in,表示查找变量的优先顺序。这一原则确保了在不同作用域中正确地解析变量名。2024-11-14
mengvlog 阅读 53 次 更新于 2025-10-31 05:37:26 我来答关注问题0
  • 一个标识符的作用域,指的是该标识符的可见范围,通常指变量的作用域。例如,变量x在函数内部不可见,会抛出异常(NameError: name 'x' is not defined),因为函数具有其独立的作用域,变量x被限制在该作用域内。在函数嵌套结构中,内部函数inner无法在外部直接访问,会抛出NameError异常,因为它在外...

  •  文暄生活科普 大神闭关7天整理!137页Python学习笔记,全面总结看这一篇就够了

    通过函数名加括号调用函数,可以传递参数和接收返回值。作用域 变量可以在全局作用域、函数作用域、嵌套作用域中定义。作用域法则决定了变量的可见性和生命周期。【图片展示】四、模块和包 模块 Python模块是一个包含Python代码的文件,文件名就是模块名。模块可以包含函数、类和变量,也可以包含可执行的代...

  • 5、函数作用域 在Python中,变量的作用域是由函数定义的位置决定的。如果变量在函数外部定义,则在整个程序中都可以访问。如果变量在函数内部定义,则只能在该函数中访问。另外,Python也支持嵌套函数和闭包,在这种情况下,内部函数可以访问外部函数的变量。

  •  腾云新分享 python实训遇到的问题

    输入输出格式不熟:掌握input()与print(),格式化推荐使用f-string。流程控制与函数问题:条件语句混乱:多练习if-elif-else和布尔运算,画流程图梳理逻辑。循环使用不清:熟悉for循环和range()参数,while循环需注意退出条件。函数作用域不清:理解局部变量与全局变量,熟悉global、nonlocal关键字。数据结构...

  • (1)函数作用域:从函数调用开始至函数执行完成,返回给调用者后,在执行过程中开辟的空间会自动释放,也就是说函数执行完成后,函数体内部通过赋值等方式修改变量的值不会保留,会随着返回给调用者后,开辟的空间会自动释放。(2)方法作用域:通过实例化的对象进行方法的调用,调用后开辟的空间不会释放...

檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部