简单瞅瞅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的web.py框架实现类似Django的ORM查询的教程
May 02 Python
Python冒泡排序注意要点实例详解
Sep 09 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
python开启摄像头以及深度学习实现目标检测方法
Aug 03 Python
python三引号输出方法
Feb 27 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
如何教少儿学习Python编程
Jul 10 Python
详解Python高阶函数
Aug 15 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 Python
python神经网络学习 使用Keras进行回归运算
May 04 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实现的简单压缩英文字符串的代码
2008/04/24 PHP
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
php实现加减法验证码代码
2014/02/14 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
js倒计时显示实例
2016/12/11 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
食品业务员岗位职责
2014/03/18 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
暂住证明怎么写
2015/06/19 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
k8s部署redis cluster集群的实现
2021/06/24 Redis
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python