Python vars() 函数详解:无参与有参行为的差异

程一诺
程一诺
发布时间:2026-10-13| 6人浏览过
原创

本文深入解析 Python 内置函数 vars() 的行为机制。当不传参数时,vars() 等价于 locals() 返回当前局部符号表;当传入对象参数时,它返回该对象的 __dict__ 属性。文章通过代码示例展示了整数等内置类型因缺少 __dict__ 而报错的情况,以及自定义类如何返回其属性字典,帮助开发者正确理解和使用该函数。

引言:探索 vars() 的表象

0. 偶然间看到一个奇怪的现象


>>> x = 1
>>> a = var()
>>> a['x']
1

这是啥操作??用help(vars)之后,我才知道......


>>> help(vars)
Help on built-in function vars in module builtins:

vars(...)
  vars([object]) -> dictionary
  
  Without arguments, equivalent to locals().
  With an argument, equivalent to object.__dict__.

如果,没传入参数就将相当于locals(),嗨,我还以为什么语法糖呢......

不知道locals()的老铁们,可以先自己试一试,之后会写

vars() 函数的核心机制

1. vars() 走起

vars() 函数返回参数对象 object 的属性和属性值的字典对象

实际上调用了对象内部定义的 __dict__ 属性

可以试试:


>>> vars(1)
TypeError: vars() argument must have __dict__ attribute

由于1这个对象没有 __dict__ 属性,所以报错

当然,如果参数为空则相当于调用 locals() 函数

我们做个试验:


 class xx:
  def __init__(self):
    self.__dict__ = {'':'我是变量__dict__'}

接下来调用此类:


>>> a = xx()
>>> vars(a)
{'': '我是变量__dict__'}

没错吧,返回的是该对象的 __dict__ 属性

简单说一下 __dict__:

类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类的 __dict__ 里

一些内置的数据类型是没有 __dict__ 属性的(可以尝试下 vars('我没有__dict__属性')这个语句)

总结:vars() 的行为差异

2. 总结

  • vars() 在没有传入参数的时候,相当于调用 locals()
  • 若传入自定义类的对象,则返回对象的 __dict__ 属性,大多数自定义类会隐式创建 __dict__ 属性
  • 若传入一些内置的数据类型,则由于其没有 __dict__ 属性,会报错:TypeError: vars() argument must have __dict__ attribute

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。