目录

一、命名空间

1.命名空间的本质

2.命名空间的种类

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

4.命名空间的加载顺序

5.命名空间的查找顺序

二、作用域

1.作用域指的是:

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

3.变量的搜索顺序

三、全局变量和局部变量

四、global和nonlocal关键字

1.glocal关键字

2.nonlocal关键字

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


一、命名空间

1.命名空间的本质

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

2.命名空间的种类

局部命名空间

记录的是参数以及在函数体中声明的变量名和值

全局命名空间

记录的是整个py文件中的变量和函数

内置命名空间

记录的是内置函数

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

ollama server 状态下 python 调用_Python命名空间

 

注意: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)如果一开始就是从全局命名空间中查找------->全局命名空间------->内置命名空间

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

ollama server 状态下 python 调用_Python函数_02

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

ollama server 状态下 python 调用_glocal_03


二、作用域

1.作用域指的是:

变量的可用范围

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

局部作用域

函数体中声明的变量

嵌套作用域

嵌套函数中外层函数体中声明的变量

全局作用域

py文件中声明的变量

内置作用域

Python提供的变量或函数

ollama server 状态下 python 调用_glocal_04

ollama server 状态下 python 调用_Python命名空间_05

3.变量的搜索顺序

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

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

ollama server 状态下 python 调用_Python命名空间_06


三、全局变量和局部变量

全局变量

不可变数据类型

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

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

可变类型数据类型

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

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

ollama server 状态下 python 调用_Python作用域_07


四、global和nonlocal关键字

glocal

可以将局部变量变成一个全局变量

nonlocal

可以修改外层(非全局)变量

1.glocal关键字

ollama server 状态下 python 调用_glocals() locals()_08

ollama server 状态下 python 调用_Python函数_09

2.nonlocal关键字

ollama server 状态下 python 调用_Python函数_10


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

命名空间

定义了在某个作用域内的变量名和绑定值之间的对应关系

作用域

定义了命名空间中的变量能够在多大的范围内起作用