简单瞅瞅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读取环境变量的方法和自定义类分享
Nov 22 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
Python基于PycURL自动处理cookie的方法
Jul 25 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
利用Python爬取可用的代理IP
Aug 18 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
Python爬虫之xlml解析库(全面了解)
Aug 08 Python
python实现判断一个字符串是否是合法IP地址的示例
Jun 04 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
python 动态迁移solr数据过程解析
Sep 04 Python
简单了解如何封装自己的Python包
Jul 08 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 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无法实现多线程的问题
2015/09/25 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
python多线程同步实例教程
2019/08/11 Python
python GUI计算器的实现
2020/10/09 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
应届生英语教师求职信
2013/11/05 职场文书
前台文员岗位职责及工作流程
2013/11/19 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
学生安全责任协议书
2016/03/22 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL