马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
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. 作用域示例
- x = 10 # 全局作用域
- def outer():
- y = 20 # 外部函数的局部作用域
- def inner():
- z = 30 # 内部函数的局部作用域
- print(x, y, z) # x是全局,y是外部,z是局部
- inner()
- outer()
复制代码
- 在inner函数中,查找变量的顺序是:先查找inner函数的局部作用域,如果没有找到,再查找outer函数的嵌套作用域,最后查找全局作用域。
3. 全局变量与局部变量
- 全局变量:在全部函数外部定义的变量,通常可以在整个模块内访问。
- 局部变量:在函数内部定义的变量,只在该函数内部有效。
- x = 100 # 全局变量
- def func():
- x = 50 # 局部变量
- print(x) # 输出50
- func()
- print(x) # 输出100(全局变量)
复制代码 4. global与nonlocal关键字
- global:用来在函数内部修改全局变量的值。
- x = 10
- def func():
- global x
- x = 20
- func()
- print(x) # 输出20
复制代码 - nonlocal:用来在嵌套函数中修改外层函数的局部变量。
- def outer():
- x = 10
- def inner():
- nonlocal x
- x = 20
- inner()
- print(x) # 输出20
- outer()
复制代码 5. 闭包
在Python中,当一个函数内部的变量被外部函数返回而且继续存在时,形成了一个闭包。这个变量会保存外部函数的作用域。
- def outer():
- x = 10
- def inner():
- print(x)
- return inner
- closure = outer()
- closure() # 输出10,x保留了outer的作用域
复制代码 6. 作用域与生命周期
- 局部作用域:在函数调用时创建,函数返回时销毁。
- 全局作用域:在模块加载时创建,步调竣事时销毁。
- 内置作用域:Python运行时环境内置的,不会销毁。
总结
- Python的作用域遵照LEGB规则(Local -> Enclosing -> Global -> Built-in)。
- 利用global和nonlocal关键字可以影响变量的作用域。
- 变量的作用域决定了它的生命周期和访问方式,明白作用域对于制止错误和调试非常紧张。
如果你有具体的作用域问题或更深的探讨,随时可以提出来!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |