简单瞅瞅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实现简易端口扫描器代码实例
Mar 15 Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 Python
如何利用Boost.Python实现Python C/C++混合编程详解
Nov 08 Python
Python绘制并保存指定大小图像的方法
Jan 10 Python
django+echart数据动态显示的例子
Aug 12 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
使用keras根据层名称来初始化网络
May 21 Python
python 如何实现遗传算法
Sep 22 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
python switch 实现多分支选择功能
Dec 21 Python
python 闭包函数详细介绍
Apr 19 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
截获网站title标签之家内容的例子
2006/10/09 PHP
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
yii中widget的用法
2014/12/03 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
详解django自定义中间件处理
2018/11/21 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
小区门卫值班制度
2014/01/24 职场文书
优秀班干部事迹材料
2014/01/26 职场文书
置业顾问岗位职责
2014/03/02 职场文书
大学活动总结范文
2014/04/29 职场文书
护士个人总结范文
2015/02/13 职场文书
民政工作个人总结
2015/02/28 职场文书
2015年财务部工作总结
2015/04/10 职场文书
python中subplot大小的设置步骤
2021/06/28 Python