python中的局部作用域和全局作用域说明

/ 0评 / 0

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