python中的作用域仅仅是按照函数内外进行划分的,和C++中全局和局部作用域变量的范围不同。
局部作用域:只能在被声明的函数内部访问,外部不能访问,不同函数里可以定义相同名称的变量。在加载函数的时候,系统申请了一块临时地址,用来存储函数相关信息。
全局作用域:可以在整个程序范围访问,任意函数也可以访问,函数内可以读取,如果修改全局变量,需要加global关键字,先用global关键字进行声明。
说明:python的作用域由def、class、lambda等语句产生,if,try,for等语句并不会产生新的作用域。所以在if,try,for等语句中定义的变量,在函数内都可以访问,而不会随着语句的结束而被回收。
python遇到一个变量的会按照LEGB法则进行搜索查询
Local(本地作用域)->Enclosinglocals(当前作用域被嵌入的本地作用域)->Global(全局、模块作用域)->Built-in(内置作用域)
locals():查看当前域的变量
globals():查看全局域的变量
locals()如果在全局调用,和globals()调用一致,输出全局域的变量
关键字说明:
global:局部声明使用和修改全局变量,使用global声明
g_value = 10
def modify():
global g_value
g_value = 100
print(g_value)
# gvalue:100
nonlocal:将局部变量提升为嵌套局部变量,使用nonlocal声明
def outer():
num = 10
def inner():
nonlocal num
num = 100
inner()
print(num)
# num:100