Python函数--命名空间,作用域

目录

一、命名空间

1.命名空间的本质

2.命名空间的种类

3.访问命名空间中的内容

4.命名空间的加载顺序

5.命名空间的查找顺序

二、作用域

1.作用域指的是:

2.根据变量声明的位置不同,作用域可以分为4类:

3.变量的搜索顺序

扫描二维码关注公众号,回复: 4923687 查看本文章

三、全局变量和局部变量

四、global和nonlocal关键字

1.glocal关键字

2.nonlocal关键字

五、命名空间与作用域的关系


一、命名空间

1.命名空间的本质

Python的命名空间的本质是一个字典,用来记录变量名称和值。

2.命名空间的种类

局部命名空间 记录的是参数以及在函数体中声明的变量名和值
全局命名空间 记录的是整个py文件中的变量和函数
内置命名空间

记录的是内置函数

eg:print()   id()   ....................

 

注意:func()得本质就是内存地址调用方法

            函数名本质就是内存地址

3.访问命名空间中的内容

locals() 使用locals()内置函数来查看局部命名空间中的内容
globals() 使用globals()内置函数来查看全局命名空间中的内容

**注意事项:

如果locals()没有在函数体中,而是在py文件中,打印出来的内容和glocals()打印出来的内容相同

'''

1.使用locals()内置函数来查看局部命名空间种的内容
2.使用globals()内置函数来查看全局命名空间中的内容
注意:
如果locals()没有在函数体中,而是在py文件中,
打印出来的内容和globals()相同
'''
d = 30


def func(c):
    a = 10
    b = 20
    print(locals())  # {'b': 20, 'a': 10, 'c': 30}


func(30)
print(globals())
print(locals())

# {'__name__': '__main__', '__doc__': '\n\n1.使用locals()内置函数来查看局部命名空间种的内容\n2.使用globals()内置函数来查看全局命名空间中的内容\n注意:\n如果locals()没有在函数体中,而是在py文件中,\n打印出来的内容和globals()相同\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000001DBD0B8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/python/day09/demo02_访问命名空间中的内容.py', '__cached__': None, 'd': 30, 'func': <function func at 0x0000000001E2F730>}

4.命名空间的加载顺序

内置命名空间>全局命名空间>局部命名空间

5.命名空间的查找顺序

(1)局部命名空间------>全局聚命名空间---->内置命名空间

(2)如果一开始就是从全局命名空间中查找------->全局命名空间------->内置命名空间

找到就返回内容,找不到就报错

注意:自己的变量名不要和内置的函数名相同,否则无法使用命名空间中的内容


二、作用域

1.作用域指的是:

变量的可用范围

2.根据变量声明的位置不同,作用域可以分为4类:

局部作用域 函数体中声明的变量
嵌套作用域 嵌套函数中外层函数体中声明的变量
全局作用域 py文件中声明的变量
内置作用域 Python提供的变量或函数

3.变量的搜索顺序

先从当前作用域开始,如果找到则停止搜索,如果找不到就往上一层作用域中查找

以此类推,如果找不到就报错


三、全局变量和局部变量

全局变量

不可变数据类型

int  float   str   tuple...............

函数无法修改全局变量的值

可变类型数据类型

list   dict    set..............

函数可以修改全局变量的值


四、global和nonlocal关键字

glocal 可以将局部变量变成一个全局变量
nonlocal 可以修改外层(非全局)变量

1.glocal关键字

2.nonlocal关键字


五、命名空间与作用域的关系

命名空间 定义了在某个作用域内的变量名和绑定值之间的对应关系
作用域 定义了命名空间中的变量能够在多大的范围内起作用

猜你喜欢

转载自blog.csdn.net/g_optimistic/article/details/86101706