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


Posted in Python onSeptember 27, 2019

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

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

Python 相关文章推荐
Python实现统计单词出现的个数
May 28 Python
Windows下实现Python2和Python3两个版共存的方法
Jun 12 Python
python中os和sys模块的区别与常用方法总结
Nov 14 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
Python向excel中写入数据的方法
May 05 Python
在macOS上搭建python环境的实现方法
Aug 13 Python
python中调试或排错的五种方法示例
Sep 12 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 Python
如何使用python包中的sched事件调度器
Apr 30 Python
python语言中pandas字符串分割str.split()函数
Aug 05 Python
Python 获取项目根路径的代码
Sep 27 #Python
Python Pandas对缺失值的处理方法
Sep 27 #Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 #Python
Python操作qml对象过程详解
Sep 26 #Python
python 字典的打印实现
Sep 26 #Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 #Python
QML使用Python的函数过程解析
Sep 26 #Python
You might like
PHP 中的批处理的实现
2007/06/14 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
JS实现页面打印功能
2017/03/16 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
es6数组includes()用法实例分析
2020/04/18 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
八大排序算法的Python实现
2021/01/28 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
python中模块的__all__属性详解
2017/10/26 Python
python使用tornado实现登录和登出
2018/07/28 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
Django models filter筛选条件详解
2020/03/16 Python
房地产销售大学生自我评价分享
2013/11/11 职场文书
合作协议书模板2014
2014/09/26 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
2014年妇联工作总结
2014/11/21 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
初三语文教学反思
2016/03/03 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python