【python底子】python中变量作用域介绍
在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企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]