函数(四)-命名空间与作用域

一、命名空间

1 概念:保存对象和值的字典

2 分类

  • 局部命名空间:函数内定义内容。
  • 全局命名空间:模块级别,当前所有的py文件
  • 内置命名空间:解释器级别,内置的方法等

3 访问命名空间

  • locals():访问局部命名空间:根据调用的位置有关系
  • globals():访问全局命名空间:与调用位置无关

4 加载顺序:从大到小

5 查找顺序:从小到大

# 情形1
id = 10

def func():
    id = 20 
    print(id)  # 20   
        
func()  # 



# 情形2
id = 10

def func():
    # id = 20 
    print(id)  # 10 
       
func() 


# 情形3
# id = 10

def func():
    # id = 20 
    print(id)  # id函数
        
func() 

二、 作用域,局部变量和全局变量

1 概念

作用域:一个对象起作用的范围。

局部变量:仅在函数内部起作用的变量。

全局变量:在整个文件中起作用的变量。

2 作用域分类(LEGB)

  • Local(函数内部)局部作用域

  • Enclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)

  • Global(模块全局)全局作用域

  • Built-in(内建)内建作用域

a = 10
def func():
    b = 20
    def inner():
        c = 30
        print(c)
    inner()
    print(b)
    
print(a)

问题:作用域和命名空间关系?

作用域是一个或多个命名空间叠加的结果。

注意:

在Python中,模块(module),类(class)、函数(def、lambda)会产生新的作用域。

posted @ 2020-12-04 11:50  小杜打醋尢买布  阅读(109)  评论(0编辑  收藏  举报