Python 内建函数列表 > Python 的内置函数 vars

Python 的内置函数 vars() 是一个非常有用的工具函数,主要用于返回对象的 __dict__ 属性。它可以应用于模块、类、实例以及其他具有 __dict__ 属性的对象。以下是关于 vars() 函数的详细说明:

基本用法

  1. 不带参数调用
    vars() 不带参数调用时,它等同于 locals() 函数,返回当前局部作用域的符号表(通常是当前函数的局部变量)。
    def example():
        x = 10
        y = 20
        print(vars())  # 输出 {'x': 10, 'y': 20}
       
    example()
    
  2. 带参数调用
    当使用参数调用时,vars(obj) 会返回对象 obj__dict__ 属性,该属性通常是一个字典,存储了对象的属性和值。
    class MyClass:
        def __init__(self):
            self.a = 1
            self.b = 2
       
    obj = MyClass()
    print(vars(obj))  # 输出 {'a': 1, 'b': 2}
    

适用对象

  • 模块vars() 可以返回模块的全局变量字典。
    import math
    print(vars(math))  # 输出 math 模块的所有属性和函数
    
  • 类和实例:对于类和实例,vars() 返回其 __dict__ 属性。
    class Example:
        class_attr = "class value"
      
        def __init__(self):
            self.instance_attr = "instance value"
      
    print(vars(Example))  # 输出类的命名空间,包括 class_attr
    obj = Example()
    print(vars(obj))      # 输出实例的命名空间,如 instance_attr
    
  • 其他对象:如果对象没有 __dict__ 属性,vars() 会抛出 TypeError 异常。
    print(vars(10))  # TypeError: vars() argument must have __dict__ attribute
    

注意事项

  1. __dict__ 可变性:由于 vars() 返回的是对象的 __dict__,因此对返回的字典进行修改会影响原对象。
    obj = MyClass()
    d = vars(obj)
    d['c'] = 3  # 这会动态添加一个新属性到 obj
    print(obj.c)  # 输出 3
    
  2. dir() 的区别vars() 返回的是对象的属性和值,而 dir() 返回的是对象的所有属性和方法名称列表(包括继承的)。

  3. 动态属性管理vars() 常用于动态检查或修改对象的属性,特别是在元编程或调试时。

应用场景

  • 调试:快速检查对象的属性和值。
  • 动态编程:运行时动态添加或修改对象属性。
  • 序列化:获取对象的状态字典以便序列化存储。

vars() 是一个强大但需要谨慎使用的工具,合理使用可以简化代码,但过度依赖可能会降低代码的可读性和可维护性。