简单瞅瞅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 相关文章推荐
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
详解python实现线程安全的单例模式
Mar 05 Python
python 实现登录网页的操作方法
May 11 Python
django_orm查询性能优化方法
Aug 20 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
简单了解python元组tuple相关原理
Dec 02 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
利用python中集合的唯一性实现去重
Feb 11 Python
python中uuid模块实例浅析
Dec 29 Python
浅析pandas随机排列与随机抽样
Jan 22 Python
Python中time与datetime模块使用方法详解
Mar 31 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代码
2011/11/27 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
激活 ActiveX 控件
2006/10/09 Javascript
学习ExtJS accordion布局
2009/10/08 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
js插件实现图片滑动验证码
2020/09/29 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python基础教程之Hello World!
2014/08/29 Python
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
学习十八大报告感言
2014/02/28 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
各种货币符号快捷输入
2022/02/17 杂记