Python 内建函数列表 > Python 的内置函数 vars
Python 的内置函数 vars() 是一个非常有用的工具函数,主要用于返回对象的 __dict__ 属性。它可以应用于模块、类、实例以及其他具有 __dict__ 属性的对象。以下是关于 vars() 函数的详细说明:
不带参数调用:
当 vars() 不带参数调用时,它等同于 locals() 函数,返回当前局部作用域的符号表(通常是当前函数的局部变量)。
def example():
x = 10
y = 20
print(vars()) # 输出 {'x': 10, 'y': 20}
example()
带参数调用:
当使用参数调用时,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
__dict__ 可变性:由于 vars() 返回的是对象的 __dict__,因此对返回的字典进行修改会影响原对象。
obj = MyClass()
d = vars(obj)
d['c'] = 3 # 这会动态添加一个新属性到 obj
print(obj.c) # 输出 3
与 dir() 的区别:vars() 返回的是对象的属性和值,而 dir() 返回的是对象的所有属性和方法名称列表(包括继承的)。
动态属性管理:vars() 常用于动态检查或修改对象的属性,特别是在元编程或调试时。
调试:快速检查对象的属性和值。
动态编程:运行时动态添加或修改对象属性。
序列化:获取对象的状态字典以便序列化存储。
vars() 是一个强大但需要谨慎使用的工具,合理使用可以简化代码,但过度依赖可能会降低代码的可读性和可维护性。