小能豆

globals()、locals() 和 vars() 之间有什么区别?

javascript

globals()、locals() 和 vars() 之间有什么区别?


阅读 63

收藏
2024-07-22

共1个答案

小能豆

在 Python 中,globals()locals()vars() 是内置函数,用于访问不同类型的变量作用域。这些函数各自有不同的用途和返回值,以下是它们之间的详细区别:

globals()

  • 目的:返回一个表示全局符号表的字典。这个字典包含在模块或脚本的顶层定义的全局变量、函数和类。
  • 用途:用于在函数或方法中访问或修改全局变量。
  • 示例

```python
x = 10

def func():
print(globals()) # 显示包括 ‘x’ 在内的全局变量

func()
```

运行结果:
python {'__name__': '__main__', 'x': 10, ...}

locals()

  • 目的:返回一个表示当前局部符号表的字典。这个字典包含在当前函数或方法作用域内定义的局部变量。
  • 用途:用于在函数或方法中访问或修改局部变量。也可以用于查看当前作用域内定义了哪些变量。
  • 示例

```python
def func():
a = 5
b = 10
print(locals()) # 显示局部变量 ‘a’ 和 ‘b’

func()
```

运行结果:
python {'a': 5, 'b': 10}

vars()

  • 目的:返回模块、类、实例或局部符号表的 __dict__ 属性。它提供了以字典形式访问或修改对象、类或模块的属性的方式。
  • 用途
  • 对于模块或类,返回其 __dict__ 属性,包含定义的属性和方法。
  • 对于类实例,返回实例的 __dict__,包含实例属性。
  • 在函数内使用时,表现类似于 locals(),提供局部符号表。
  • 示例

```python
class MyClass:
def init(self):
self.x = 1
self.y = 2

obj = MyClass()
print(vars(obj)) # 显示实例属性 {‘x’: 1, ‘y’: 2}

def func():
z = 3
print(vars()) # 显示局部变量 {‘z’: 3}

func()
```

总结区别

  1. 作用域
  2. globals(): 始终显示全局作用域(模块或脚本的顶层)。
  3. locals(): 显示当前函数或方法的局部作用域。
  4. vars(): 可以显示模块、类、实例的 __dict__ 属性,或局部变量(如果在函数内使用)。

  5. 使用上下文

  6. globals(): 用于访问或修改全局变量。
  7. locals(): 用于访问或修改局部变量。
  8. vars(): 用于访问或修改对象的属性,或查看局部变量(如果不传参数)。

  9. 返回值

  10. globals(): 返回全局变量的字典。
  11. locals(): 返回局部变量的字典。
  12. vars(): 返回对象的 __dict__ 属性或局部变量的字典。

理解这些函数有助于在调试、反射和动态交互中更好地处理 Python 中的变量和对象。

2024-07-22