【Python笔记】global和nonlocal区别

# L = Local     局部作用域
# E = Enclosing 嵌套作用域
# N = nonlocal  只作用于嵌套作用域,而且只是作用在函数里面
# G = global    全局作用域
# B = Built-in  内置作用域
"""
locals()函数返回一个当前位置的所有局部变量的字典
globals()函数返回一个全局变量的字典,包括所有导入的变量
local设置局部变量,local需在函数体内设置;在函数体内声明的变量,默认都是局部变量
global设置为全局变量,global需在函数体内设置; global同时还可以定义新的全局变量
nonlocal内层函数改变外层函数变量值,nonlocal需在内层函数中使用 ;nonlocal不能定义新的外层函数变量
"""
def outer(c):
    global a
    a,b=10,20
    print('【outer】a={},b={}'.format(a,b))
    print('【outer】局部变量',locals())
    def inner(*args, **kwargs):
        nonlocal c
        c=30
        print('【inner】nonlocal c={}'.format(c))
    inner()

outer(1)
print('全局变量',globals())
【outer】a=10,b=20
【outer】局部变量 {
    
    'b': 20, 'c': 1}
【inner】nonlocal c=30
全局变量 {
    
    '__name__': '__main__', '__doc__': None, 
'__package__': None, 
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x02D5DD30>,
 '__spec__': None, 
'__annotations__': {
    
    }, 
'__builtins__': <module 'builtins' (built-in)>, 
'__file__': 'd:\\desktop\\Python code\\jupyter notebook\\te.py', 
'__cached__': None, 
'outer': <function outer at 0x02F0C660>, 
'a': 10}

Reference:https://www.cnblogs.com/shuzf/p/12768767.html

猜你喜欢

转载自blog.csdn.net/qq_36056219/article/details/110232834