{site_name}

{site_name}

🌜 搜索

Python作用域是指变量或函数可以被访问的代码块范围,而命名空间则是在程序中存储变量名称和其值之间映射的数据结构

Python 𝄐 0
python命名空间和作用域的关系,python中作用域,python3 作用域,python名称空间,python 命名空间 作用域,python作用域规则
Python作用域是指变量或函数可以被访问的代码块范围,而命名空间则是在程序中存储变量名称和其值之间映射的数据结构。Python中的每个作用域都有自己的命名空间,这样可以避免不同作用域中的变量名称冲突。

Python中有两种主要类型的作用域:

1. 全局作用域:在整个程序中都可访问。
2. 局部作用域:只能在定义它们的函数、类等代码块中访问。

当Python解释器在执行代码时,会维护一张当前作用域和所有父作用域的命名空间表格。如果要使用变量或函数,解释器会在这张表格中查找该名称对应的值,并从最近的作用域开始查找。如果找不到,则会引发 NameError 异常。

下面是一个示例,演示了 Python 中的全局作用域和局部作用域以及命名空间。

python
x = 10 # x 在全局作用域内

def my_func():
y = 20 # y 在 my_func 函数的局部作用域内
print("x inside my_func:", x) # 访问全局变量 x
print("y inside my_func:", y)

my_func()

print("x outside my_func:", x) # 访问全局变量 x

# 输出:
# x inside my_func: 10
# y inside my_func: 20
# x outside my_func: 10


在上面的代码中,变量 x 在全局作用域内定义,在函数 my_func 中访问该变量不需要使用 global 关键字。而变量 y 在函数 my_func 中定义,只能在该函数的局部作用域内使用。

另外一个示例是演示 Python 中命名空间的概念:

python
def outer_func():
a = 100 # a 在 outer_func 的命名空间中

def inner_func():
b = 200 # b 在 inner_func 的命名空间中
print("locals in inner_func:", locals())

inner_func()
print("locals in outer_func:", locals())

outer_func()

# 输出:
# locals in inner_func: {'b': 200}
# locals in outer_func: {'inner_func': <function outer_func.<locals>.inner_func at 0x1089ac7b8>, 'a': 100}


在上面的代码中,outer_func 和 inner_func 都有各自的命名空间,并且它们都有自己的局部变量。当我们在 inner_func 函数中调用 locals() 函数时,可以看到该函数返回了当前命名空间中所有变量的名称和值。同样地,在 outer_func 中也可以获取相应的命名空间内容。