https://www.xin3721.com/eschool/python.html

在Python里面有一个模块collections,解释是数据类型容器模块。这里面有一个collections.defaultdict()经常被用到。主要说说这个东西。

综述:

这里的defaultdict(function_factory)构建的是一个类似dictionary的对象,其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例,而且具有默认值。比如default(int)则创建一个类似dictionary对象,里面任何的values都是int的实例,而且就算是一个不存在的key, d[key] 也有一个默认值,这个默认值是int()的默认值0.

defaultdict

dict subclass that calls a factory function to supply missing values。

这是一个简短的解释

defaultdict属于内建函数dict的一个子类,调用工厂函数提供缺失的值。

比较晕,什么是工厂函数:

来自python 核心编程的解释

Python 2.2 统一了类型和类, 所有的内建类型现在也都是类, 在这基础之上, 原来的

所谓内建转换函数象int(), type(), list() 等等, 现在都成了工厂函数。 也就是说虽然他

们看上去有点象函数, 实质上他们是类。当你调用它们时, 实际上是生成了该类型的一个实

例, 就象工厂生产货物一样。

下面这些大家熟悉的工厂函数在老的Python 版里被称为内建函数:

int(), long(), float(), complex()

str(), unicode(), basestring()

list(), tuple()

type()

以前没有工厂函数的其他类型,现在也都有了工厂函数。除此之外,那些支持新风格的类

的全新的数据类型,也添加了相应的工厂函数。下面列出了这些工厂函数:

dict()

bool()

set(), frozenset()

object()

classmethod()

staticmethod()

super()

property()

file()

再看看它的使用:

这里就开始有点明白了,原来defaultdict可以接受一个内建函数list作为参数。其实呢,list()本身是内建函数,但是再经过更新后,python里面所有东西都是对象,所以list改编成了类,引入list的时候产生一个类的实例。

还是不太明白,再看defaultdict的help解释

class collections.defaultdict([default_factory[, ...]])

Returns a new dictionary-like object. defaultdict is a subclass of the built-in dict class. It overrides one method and adds one writable instance variable. The remaining functionality is the same as for the dict class and is not documented here.

首先说了,collections.defaultdict会返回一个类似dictionary的对象,注意是类似的对象,不是完全一样的对象。这个defaultdict和dict类,几乎是一样的,除了它重载了一个方法和增加了一个可写的实例变量。(可写的实例变量,我还是没明白)

The first argument provides the initial value for the default_factory attribute; it defaults to None. All remaining arguments are treated the same as if they were passed to the dict constructor, including keyword arguments.

defaultdict objects support the following method in addition to the standard dict operations:

__missing__(key)

If the default_factory attribute is None, this raises a KeyError exception with the key as argument.

If default_factory is not None, it is called without arguments to provide a default value for the given key, this value is inserted in the dictionary for the key, and returned.

主要关注这个话,如果default_factory不是None, 这个default_factory将以一个无参数的形式被调用,提供一个默认值给___missing__方法的key。 这个默认值将作为key插入到数据字典里,然后返回。

十分晕。有扯出了个__missing__方法,这个__missing__方法是collections.defaultdict()的内建方法。

If calling default_factory raises an exception this exception is propagated unchanged.

This method is called by the __getitem__() method of the dict class when the requested key is not found; whatever it returns or raises is then returned or raised by __getitem__().

Note that __missing__() is not called for any operations besides __getitem__(). This means that get() will, like normal dictionaries, return None as a default rather than using default_factory.

defaultdict objects support the following instance variable:

default_factory

This attribute is used by the __missing__() method; it is initialized from the first argument to the constructor, if present, or to None, if absent.

看样子这个文档是难以看懂了。直接看示例:

defaultdict python3,Python collections.defaultdict() 与 dict的使用和区别|python3教程|python入门|python教程...相关推荐

  1. python defaultdict(list)_Python collections.defaultdict() 与 dict的使用和区别

    在Python里面有一个模块collections,解释是数据类型容器模块.这里面有一个collections.defaultdict()经常被用到.主要说说这个东西. 综述: 这里的defaultd ...

  2. python 计算机程序设计-某高校计算机编程教授教你如何快速入门python,一文带你进入编程...

    image 如何快速入门Python 学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开 ...

  3. python开发pc软件_程序员带你十天快速入门Python,玩转电脑软件开发(二)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  4. python写网站和java写网站的区别-为什么说Java和Python现阶段并不适合普通网站建设...

    经过20多年的发展,网站开发技术已经非常成熟,用于网站制作的程序语言也有很多.常见的当然是php和asp.net,特别是php程序语言,虽然其已经有很多年历史也历经多次迭代升级,但在凭借其开源.轻巧等 ...

  5. python教程推荐-入门python有什么好的书籍推荐?

    Python 越来越火爆,最近自己也在学习.整理下一些 Python 资料,和练手的项目.希望对你学习 Python 有所帮助. 如果大家想要文中 10G Python 编程视频,点击下面的卡片即可免 ...

  6. python代码入门教程_Ipython入门小教程

    学习<利用python进行数据分析>第三章 IPython:一种交互式计算和开发环境的笔记,共享给大家,同时为自己作为备忘用. 安装ipython用pip即可.ps.博主用的是win7系统 ...

  7. python程序是由一系列代码组成的_0基础7日入门Python

    Python是世界上最容易学的编程语言,从没接触过编程的人也能搞定. 从现在开始跟随极客学院成长计划,每天进取,怒赞自己. 给大家整理的这套 python 学习路线图,按照此教程一步步的学习来,肯定会 ...

  8. python网络爬虫教程-如何入门 Python 爬虫?

    "入门"是良好的动机,但是可能作用缓慢.如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习. 另外如果说知识体系里的每一个知识点是图里的点,依 ...

  9. python正则表达式匹配模式屠夫之桥_小甲鱼零基础入门Python学习视频+全套源码课件 Python视频教程 96讲...

    课程简介: 小甲鱼的Python课程,对初学者来说相当不错!97讲完全解读,会让大家对Python的认识从无到有,推荐给大家! ----------课程目录---------- 第000讲 愉快的开始 ...

最新文章

  1. 想学习编程,我是如何入坑python的?
  2. MySQL 8.0版本无法使用 node、Navicat等三方工具连接的问题
  3. rman datafile恢复(归档模式)
  4. Daily Scrum9 11.13
  5. thinkphp5每周学习总结1019
  6. 写代码还在用abcd命名,等着出大问题被开除吧(变量命名方法)
  7. GPU Gems1 - 1 用物理模型进行高效的水模拟(Effective Water Simulation from Physical Models)
  8. WHENEVER SQLERROR EXIT SQL.SQLCODE
  9. go语言载入json的一个坑
  10. Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务(三)
  11. 第二个Spring冲刺周期团队进展报告
  12. 2016030206 - mysql常用命令
  13. 如何通过统计值z看置信水平_中恨他! 看看他如何通过这一简单技巧来改善统计信息页面...
  14. C++程序员应该掌握的东西
  15. QtCreator设置代码美化astyle之Artistic
  16. 手把手教你PXE高效网络装机、Kickstart无人值守安装(详细版)
  17. UOS(unity operating system)统一操作系统
  18. 在线教育-谷粒学院学习笔记(八)
  19. Java程序员必看的15本书的电子版下载地址
  20. Power law and Power law distribution(幂律和幂律分布)

热门文章

  1. 大工17秋《计算机文化基础》在线测试1,奥鹏大工15秋《计算机文化基础》在线测试1答案...
  2. derby mysql 同步_[Derby]数据库操作说明
  3. $ajax不能识别,JQuery/JS Ajax功能无法识别
  4. 如何在不丢失文件的情况下快速重置Win11
  5. 360浏览器图片放大镜如何关闭
  6. 搜狐视频如何开启青少年模式
  7. websocket的用途/场景
  8. MySQL数据库的数据类型以及取值范围详解
  9. 怎么从mysql注册表删除用户_mysql 创建和删除用户
  10. python 分类变量转为哑变量_python 虚拟变量