简单瞅瞅Python vars()内置函数的实现

作者:王尼玛 时间:2021-03-29 20:41:05 

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()的老铁们,可以先自己试一试,之后会写

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__属性')这个语句)

2.总结

  • vars()在没有传入参数的时候,相当于调用locals()

  • 若传入自定义类的对象,则返回对象的__dict__属性,大多数自定义类会隐式创建__dict__属性

  • 若传入一些内置的数据类型,则由于其没有__dict__属性,会报错:TypeError: vars() argument must have __dict__ attribute

来源:https://segmentfault.com/a/1190000020508021

标签:Python,vars()
0
投稿

猜你喜欢

  • pytorch + visdom CNN处理自建图片数据集的方法

    2023-05-03 06:33:16
  • TOPI如何使TVM代码不那么样板化

    2022-02-02 00:22:07
  • HTTP 错误 500.100 - 内部服务器错误 - ASP 错误

    2008-09-12 13:07:00
  • Python3查找列表中重复元素的个数的3种方法详解

    2022-08-01 16:36:07
  • Python中无限循环需要什么条件

    2023-03-28 09:05:14
  • python实现输入三角形边长自动作图求面积案例

    2023-08-12 01:47:49
  • SQL列名无效 sql查询列名 sql返回列名

    2009-09-03 13:19:00
  • python 代码运行时间获取方式详解

    2021-01-22 19:07:36
  • Python 下载及安装详细步骤

    2021-05-17 05:24:24
  • 关于ASP eof与bof 区别分析

    2011-03-11 11:14:00
  • 浅谈Pytorch torch.optim优化器个性化的使用

    2023-12-19 08:47:12
  • Python数学建模学习模拟退火算法约束条件处理示例解析

    2022-06-16 19:19:20
  • 关于python写入文件自动换行的问题

    2021-09-01 00:03:13
  • ASP XML操作类代码

    2011-03-08 10:47:00
  • numpy数组之存取文件的实现示例

    2021-02-20 11:32:57
  • Oracle中返回结果集的存储过程分享

    2012-07-11 15:50:16
  • 详解python字节码

    2021-12-16 16:56:29
  • python在Windows8下获取本机ip地址的方法

    2023-07-31 17:10:44
  • 使用Python实现分别输出每个数组

    2021-10-30 00:28:49
  • Django-celery-beat动态添加周期性任务实现过程解析

    2021-07-29 13:09:49
  • asp之家 网络编程 m.aspxhome.com