python--作用域

Python的作用域一共有4种,分别是:
  • L (Local) 局部作用域
  • E (Enclosing) 闭包函数外的函数中
  • G (Global) 全局作用域
  • B (Built-in) 内置作用域(内置函数所在模块的范围)
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
 
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
修改全局变量 num: 
num = 1
def fun1():
     global num  # 需要使用 global 关键字声明
     print(num)   #1   
     num = 123
     print(num)   #123
fun1()
print(num)    #123

 

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

def outer():
     num = 10
     def inner():
          nonlocal num   # nonlocal关键字声明
          num = 100
          print(num)  #100
     inner()
     print(num)  #100
outer()

 

posted @ 2020-11-13 16:09  盲仔不瞎忙  阅读(108)  评论(0编辑  收藏  举报