【python底子】python中变量作用域介绍

金歌  论坛元老 | 2025-1-11 01:44:30 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1061|帖子 1061|积分 3183

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在Python中,变量的作用域决定了变量可以被访问的范围。Python主要有以下几种作用域:
1. LEGB规则(Local, Enclosing, Global, Built-in)

Python利用LEGB规则来查找变量。这个规则按照以下顺序查找变量:


  • L(Local):局部作用域,指当前函数或代码块中定义的变量。
  • E(Enclosing):嵌套作用域,指外部函数(包含当前函数)的作用域中定义的变量。它是函数嵌套时的外部环境。
  • G(Global):全局作用域,指模块级别上定义的变量。
  • B(Built-in):内置作用域,指Python解释器提供的内置函数和非常等(好比print(), len(), max()等)。
2. 作用域示例

  1. x = 10  # 全局作用域
  2. def outer():
  3.     y = 20  # 外部函数的局部作用域
  4.     def inner():
  5.         z = 30  # 内部函数的局部作用域
  6.         print(x, y, z)  # x是全局,y是外部,z是局部
  7.     inner()
  8. outer()
复制代码


  • 在inner函数中,查找变量的顺序是:先查找inner函数的局部作用域,如果没有找到,再查找outer函数的嵌套作用域,最后查找全局作用域。
3. 全局变量与局部变量



  • 全局变量:在全部函数外部定义的变量,通常可以在整个模块内访问。
  • 局部变量:在函数内部定义的变量,只在该函数内部有效。
  1. x = 100  # 全局变量
  2. def func():
  3.     x = 50  # 局部变量
  4.     print(x)  # 输出50
  5. func()
  6. print(x)  # 输出100(全局变量)
复制代码
4. global与nonlocal关键字



  • global:用来在函数内部修改全局变量的值。
    1. x = 10
    2. def func():
    3.     global x
    4.     x = 20
    5. func()
    6. print(x)  # 输出20
    复制代码
  • nonlocal:用来在嵌套函数中修改外层函数的局部变量。
    1. def outer():
    2.     x = 10
    3.     def inner():
    4.         nonlocal x
    5.         x = 20
    6.     inner()
    7.     print(x)  # 输出20
    8. outer()
    复制代码
5. 闭包

在Python中,当一个函数内部的变量被外部函数返回而且继续存在时,形成了一个闭包。这个变量会保存外部函数的作用域。
  1. def outer():
  2.     x = 10
  3.     def inner():
  4.         print(x)
  5.     return inner
  6. closure = outer()
  7. closure()  # 输出10,x保留了outer的作用域
复制代码
6. 作用域与生命周期



  • 局部作用域:在函数调用时创建,函数返回时销毁。
  • 全局作用域:在模块加载时创建,步调竣事时销毁。
  • 内置作用域:Python运行时环境内置的,不会销毁。
总结



  • Python的作用域遵照LEGB规则(Local -> Enclosing -> Global -> Built-in)。
  • 利用global和nonlocal关键字可以影响变量的作用域。
  • 变量的作用域决定了它的生命周期和访问方式,明白作用域对于制止错误和调试非常紧张。
如果你有具体的作用域问题或更深的探讨,随时可以提出来!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表