Python vars() 函数

Python vars() 语法

vars() 是 Python 的一个内置函数,它返回一个对象的 __dict__ 属性,或当前局部作用域的字典。

语法:

vars(object)

说明:

vars() 函数接收单个参数。

  • object(可选):是任意具有 __dict__ 属性的对象(包括模块、类、实例)。
    • 如果 object 是一个模块对象,vars() 会返回该模块的 __dict__ 属性,即其全局命名空间。
    • 如果 object 是一个类对象,vars() 会返回该类的 __dict__ 属性,其中包含类的所有属性和方法。
    • 如果 object 是一个类实例,vars() 会返回该实例的 __dict__ 属性,其中包含实例的所有属性。

当 vars() 不带任何参数时,它会返回当前局部作用域的字典。

  • 在函数内部,它返回当前函数的局部变量字典。
  • 在模块级别(即不在任何函数内部),它返回当前模块的全局命名空间字典(与 globals() 相同)。

如果 object 不支持 __dict__ 属性(如内置类型 int、float),vars() 会抛出 TypeError 异常。

提示:

  • list、tuple、str、dict、set 等类,都是具有 __dict__ 属性的对象,但它们的实例却不是。
  • vars() 是一个强大的内省工具,允许在运行时动态地操作对象的属性或变量。

Python vars() 摘要

使用频率
官方文档 查看

Python vars() 示例

接下来,我们通过几个简单的例子来讲解一下 Python vars() 函数是如何使用的。

示例 1:vars() 参数是具有 __dict__ 属性的对象

result = vars(dict)
print(result)

运行结果如下。

{'__new__': <built-in method __new__ of type object at 0x00007FF895F1C3F0>, '__repr__': <slot wrapper '__repr__' of 'dict' objects>……For example:  dict(one=1, two=2)"}

分析:

dict 是一个类名,用于创建一个字典。由于 Python 一切皆对象,因为类本质上也是一个对象。同样的,还有 list、tuple、str 等类。

示例 2:vars() 参数是没有 __dict__ 属性的对象

result = vars([1, 2, 3])
print(result)

运行结果如下。

(报错)TypeError: vars() argument must have __dict__ attribute

分析:

虽然 list 类是具有 __dict__ 属性的对象,但它的实例并不是。

示例 3:vars() 不带参数

result = vars()
print(result)

运行结果如下。

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002DA0E6FBEF0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'test.py', '__cached__': None}

分析:

当 vars() 不带参数时,会以字典方式返回当前位置的所有局部变量。此外,与 vars() 函数相似的有 locals()、globals() 这两个内置函数。

globals()、locals() 和 vars()

与 Python 命名空间相关的内置函数有 3 个:globals()、locals()、vars(),它们之间的区别如下。

  • globals():返回当前命名空间的全局变量。
  • locals():返回当前命名空间的局部变量。
  • vars():不带参数时等价于 locals(),带参数时等价于 object.__dict__()。

示例 4:globals() vs locals() vs vars()

a = 10
b = 20
# 定义函数
def foo():
    c = 30
    d = 40
    print(globals())
    print(locals())
    print(vars())

# 调用函数
foo()

运行结果如下。

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000027F748EBEF0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:\\my-test\\python-test\\test.py', '__cached__': None, 'a': 10, 'b': 20, 'foo': <function foo at 0x0000027F748A8A40>}
{'c': 30, 'd': 40}
{'c': 30, 'd': 40}

上一篇: locals()

下一篇: reload()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号