简单瞅瞅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的Django框架实现事务交易管理的教程
Apr 20 Python
python 解压pkl文件的方法
Oct 25 Python
使用python绘制二元函数图像的实例
Feb 12 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
python 表格打印代码实例解析
Oct 12 Python
python图形用户接口实例详解
Dec 16 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
如何利用Python写个坦克大战
Nov 18 Python
pycharm实现猜数游戏
Dec 07 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 Python
python 如何用terminal输入参数
May 25 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
ThinkPHP之N方法实例详解
2014/06/20 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
js子页面获取父页面数据示例
2014/05/15 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python中怎么表示空值
2020/06/19 Python
Python 实现微信自动回复的方法
2020/09/11 Python
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
教师年度考核评语
2014/04/28 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
如何写辞职信
2015/05/13 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
商场广播稿范文
2015/08/19 职场文书
python 离散点图画法的实现
2022/04/01 Python