LEGB规则

Python在查找规则时,是按照LEGB规则查找的:Local -- Enclosed -- Glabal -- Built in

  1. Local:指的就是函数或类方法内部
  2. Enclosed:指的就是嵌套函数
  3. Global:指的就是模块中的全局变量
  4. Built in:指的就是Python为自己保留的特殊名称

如果某个name在映射空间(local)内没有找到,一直按顺序LEGB查找,如果都没找到,就会产生NameError

1 str = 'global str'
2 def outer():
3     str = 'outer str'
4     def inner():
5         str = 'inner str'
6         print(str)
7 
8     inner()
9 outer()

依次将str注释掉,就会寻找到查找顺序