简单瞅瞅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 相关文章推荐
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
深入理解Python对Json的解析
Feb 14 Python
JSON Web Tokens的实现原理
Apr 02 Python
python3使用scrapy生成csv文件代码示例
Dec 28 Python
对python插入数据库和生成插入sql的示例讲解
Nov 14 Python
python创建属于自己的单词词库 便于背单词
Jul 30 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
Python如何使用turtle库绘制图形
Feb 26 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
python 利用opencv实现图像网络传输
Nov 12 Python
python 遍历磁盘目录的三种方法
Apr 02 Python
python中__slots__节约内存的具体做法
Jul 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 HTML代码串 截取实现代码
2009/06/29 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
javascript轮播图算法
2016/10/21 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
Python import自定义模块方法
2015/02/12 Python
Python生成密码库功能示例
2017/05/23 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
自我鉴定书范文
2013/10/02 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
培训心得体会怎么写
2016/01/25 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
nginx内存池源码解析
2021/11/20 Servers
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
JavaScript执行机制详细介绍
2021/12/06 Javascript
Python各协议下socket黏包问题原理
2022/04/12 Python