简单瞅瞅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
投稿

猜你喜欢

  • JS清空上传控件input(type="file")的值的代码第1/2页

    2023-08-13 07:22:28
  • 第五章之BootStrap 栅格系统

    2024-05-05 09:14:46
  • mysql-joins具体用法说明

    2024-01-19 10:32:19
  • 对python3 Serial 串口助手的接收读取数据方法详解

    2023-05-31 17:39:01
  • 简单的PHP图片上传程序

    2024-05-22 10:06:54
  • Python Pandas聚合函数的应用示例

    2022-12-13 22:39:31
  • python 删除字符串中连续多个空格并保留一个的方法

    2021-08-16 14:07:25
  • 使用SQL Server分区表功能提高数据库的读写性能

    2024-01-17 18:32:20
  • Vue.js实现一个todo-list的上移下移删除功能

    2024-04-26 17:38:32
  • 在macOS上搭建python环境的实现方法

    2021-10-07 07:29:56
  • MySQL 5.7 create VIEW or FUNCTION or PROCEDURE

    2024-01-20 18:58:16
  • 一篇文章讲解清楚MySQL索引

    2024-01-28 11:59:24
  • python中str内置函数用法总结

    2022-06-23 10:22:45
  • SQL Server配置管理器无法连接到WMI提供程序

    2024-01-23 23:49:30
  • ASP伪静态页简单教程

    2007-09-28 14:35:00
  • 用私有属性来拯救IE7缩放图片的失真

    2009-03-03 13:57:00
  • python socket网络编程步骤详解(socket套接字使用)

    2022-09-15 11:35:08
  • JavaScript 日期联动选择器

    2010-08-01 10:18:00
  • 在Oracle PL/SQL中游标声明中表名动态变化的方法

    2009-02-28 10:39:00
  • python写一个md5解密器示例

    2023-05-24 14:45:10
  • asp之家 网络编程 m.aspxhome.com