python3 defaultdict使用方法與實現原理
轉自: https://www.cnblogs.com/jidongdeatao/p/6930325.html
defaultdict類就好像是一個dict,但是它是使用一個型別來初始化的:
>>> from collections import defaultdict
>>> dd = defaultdict(list)
>>> dd
defaultdict(<type 'list'>, {})
defaultdict類的初始化函式接受一個型別作為引數,當所訪問的鍵不存在的時候,可以例項化一個值作為預設值:
>>> dd['foo']
[]
>>> dd
defaultdict(<type 'list'>, {'foo': []})
>>> dd['bar'].append('quux')
>>> dd
defaultdict(<type 'list'>, {'foo': [], 'bar': ['quux']})
需要注意的是,這種形式的預設值只有在通過dict.__getitem__(key)
訪問的時候才有效,這其中的原因在下文會介紹。
>>> from collections import defaultdict
>>> dd = defaultdict(list)
>>> 'something' in dd
False
>>> dd.pop('something')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'pop(): dictionary is empty'
>>> dd.get('something')
>>> dd['something']
[]
defaultdict類除了接受型別名稱作為初始化函式的引數之外,還可以使用任何不帶引數的可呼叫函式,到時該函式的返回結果作為預設值,這樣使得預設值的取值更加靈活。下面用一個例子來說明,如何用自定義的不帶引數的函式zero()作為defaultdict類的初始化函式的引數:
>>> from collections import defaultdict
>>> def zero():
... return 0
...
>>> dd = defaultdict(zero)
>>> dd
defaultdict(<function zero at 0xb7ed2684>, {})
>>> dd['foo']
0
>>> dd
defaultdict(<function zero at 0xb7ed2684>, {'foo': 0})
利用from collections import defaultdict strings = ('puppy', 'kitten', 'puppy', 'puppy','weasel', 'puppy', 'kitten', 'puppy') counts = defaultdict(lambda: 0) # 使用lambda來定義簡單的函式 for s in strings: counts[s] += 1
defaultdict類是如何實現的
通過上面的內容,想必大家已經瞭解了defaultdict類的用法,那麼在defaultdict類中又是如何來實現預設值的功能呢?這其中的關鍵是使用了看>>> from collections import defaultdict >>> printdefaultdict.__missing__.__doc__ __missing__(key) # Called by __getitem__ for missing key; pseudo-code: if self.default_factory is None: raise KeyError(key) self[key] =value = self.default_factory() return value
通過檢視
__getitem__()
方法訪問一個不存在的鍵時(dict[key]這種形式實際上是__missing__()
方法獲取預設值,並將該鍵新增到字典中去。
關於Mapping Types — dict"一節。
文件中介紹,從2.5版本開始,如果派生自dict的子類定義了__missing__()
方法取得預設值。
從中可以看出,雖然dict支援
轉自: https://www.cnblogs.com/jidongdeatao/p/6930325.htmldefaultdict類就好像是一個dict,但是它是使用一個型別來初始化的:>>> from collections import default # 一、前言
這幾天為了更詳細地瞭解``Spring``,我開始閱讀``Spring``的官方文件。說實話,之前很少閱讀官方文件,就算是讀,也是讀別人翻譯好的。但是最近由於準備春招,需要了解很多知識點的細節,網上幾乎搜尋不到,只能硬著頭皮去讀官方文件。雖然我讀的這個``Spring` 源碼 att root 功能 技術內幕 瀏覽器 sel 緩存 callbacks jQuery源碼(jquery-1.7.1.js)的總體結構:(function( window, undefined ) {// 構造jQuery對象 var jQuery = (fun aid undefined 普通 並不是 關聯 off 數組遍歷 按順序 reac 一維數組遍歷(普通)
一、for與foreach遍歷結果順序一致
$arr = array(‘max‘,‘xiaoli‘,‘xiaowang‘,‘laosan‘);
//for遍歷
for(
存在的問題
客戶端硬編碼服務端的地址 引入註冊中心,方便服務的註冊與發現
註冊中心記錄的資訊:服務地址列表&服務節點權重
Zookeeper節點型別 臨時節點:客戶端。。
服務登出: tomcat關閉:設定伺服器的權重為0,隔絕後續請求 等待30S,處理完請求。。。
1.實現過程
(1)在./common資料夾下新建cmd_study.c,並在此檔案中新增如下內容
#include<common.h>
#include<command.h>
int do_study (cmd_tbl_t *cmdtp, int fl
連結串列:
連結串列和陣列都是線性表: 陣列:將元素順序地存放在一塊連續的儲存區內,元素間的順序關係由它們的儲存順序自然表示。 &n
上一篇文章講解的是IOC的原理,這一篇文章主要講解Spring IoC 容器的設計與實現原理
1.spring的IOC容器
在 Spring IoC 容器的設計中,容器有兩個系列,可以看成是容器的具體表現形式:
BeanFactory 簡單容器:實現了容器的基本
【下載地址】
《Hadoop技術內幕:深入解析MapReduce架構設計與實現原理》內容簡介:“Hadoop技術內幕”共兩冊,分別從原始碼的角度對“Common+HDFS”和“MapReduce的架構設計和實現原理”進行了極為詳細的分析。《Hadoop技術內幕:深入解析M
基本型別和包裝類的對應
以下的封裝類可以用於基本資料型別與字串的轉換
byte Byte
short Short
int 簡介
TiDB-Binlog 元件用於收集 TiDB 的 binlog,並提供實時備份和同步功能。該元件在功能上類似於 MySQL 的主從複製,MySQL 的主從複製依賴於記錄的 binlog 檔案,TiDB-Binlog 元件也是如此,主要的不同點是 TiDB 是分散式的,因此需要收集各個 TiDB 例項產
由於最近工作需要用到QT讀取資料庫中的資料,並將資料儲存至資料庫中。花了一天的時間,總算實現了從QT中讀取資料庫中的資料。網上相關資料很多,但是寫得不是很全,中間出現了一些問題,解決起來比較麻煩。所以本文從MYSQL下載、安裝,QT連線MYSQL儘可能寫詳細,若有不足,還請見
關於事務,簡單來說,就是為了保證資料完整性而存在的一種工具,其主要有四大特性:原子性,一致性,隔離性和永續性。對於Spring事務,其最終還是在資料庫層面實現的,而Spring只是以一種比較優雅的方式對其進行封裝支援。本文首先會通過一個簡單的示例來講解Spring事務是如何
前言
關於UE4的移動元件,我寫了一篇非常詳細的分析文件。由於篇幅比較大,我將其拆分成三個部分。分別從移動框架與實現原理,移動的網路同步,移動元件的優化與改造三個方面來寫。這三篇文件中難免有問題和漏洞,所以我也會在發現問題時及時更新和修改,也希望大家能給出一些 const con ons 運行時 模擬實現 原理 支持 包裝 ofo 1、簡單說一下bind、call、apply的區別
三者都是用於改變函數體內this的指向,但是bind與apply和call的最大的區別是:bind不會立即調用,而是返回一個新函數,稱為綁定函數,
提到虛擬化技術,我們首先想到的一定是 Docker,經過四年的快速發展 Docker 已經成為了很多公司的標配,也不再是一個只能在開發階段使用的玩具了。作為在生產環境中廣泛應用的產品,Docker 有著非常成熟的社群以及大量的使用者,程式碼庫中的內容也變得非常龐
提到虛擬化技術,我們首先想到的一定是 Docker,經過四年的快速發展 Docker 已經成為了很多公司的標配,也不再是一個只能在開發階段使用的玩具了。作為在生產環境中廣泛應用的產品,Docker 有著非常成熟的社群以及大量的使用者,程式碼庫中的內容也變得非常龐大。同樣,由於
原文地址:https://draveness.me/docker
提到虛擬化技術,我們首先想到的一定是 Docker,經過四年的快速發展 Docker 已經成為了很多公司的標配,也不再是一個只能在開發階段使用的玩具了。作為在生產環境中廣泛應用的產品,Docker 有著非常成熟的社群以及大量的使用
1、join有什麼用呢? 當一個執行緒正在進行中的時候,如果我們想呼叫另外一個執行緒的話,這時我們可以使用join。
2、join方法的底層原理,簡單來說就是,join方法能把所呼叫join方法的執行緒進入休眠狀態(wait()),等執行完joinThread執行緒之後,會自動
在學習CAS的過程中,我百思不得其解的一個問題就是在多cpu併發的環境下,CAS如何保證執行緒的安全性呢?關於這個問題下面的兩篇部落格寫的比較不錯,基本把其中的原理解釋清楚了,這裡我只作一個簡單的闡 >>> print dict.__missing__.__doc__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError:
相關推薦
python3 defaultdict使用方法與實現原理
Spring方法注入的使用與實現原理
jQuery技術內幕:深入解析jQuery架構設計與實現原理
PHP數組遍歷與實現原理
簡單的RPC原型與實現原理
Uboot命令實現與實現原理
通過自己實現連結串列的增刪改查瞭解連結串列這些方法的實現原理
Spring IoC 容器的設計與實現原理
Hadoop技術內幕:深入解析MapReduce架構設計與實現原理 (大資料技術叢書).epub
Java——Integer類的方法與實現,String和int的相互轉換
TiDB EcoSystem Tools 原理解讀(一):TiDB-Binlog 架構演進與實現原理
QT5.5與MYSQL5.6資料庫連線的具體方法與實現
Spring 事務用法示例與實現原理
UE4移動元件詳解(一)——移動框架與實現原理
bind、call、apply的區別與實現原理
Docker 核心技術與實現原理
Docker學習總結(29)——Docker核心技術與實現原理
Docker 核心技術與實現原理(轉載)
二十五、併發程式設計之join應用與實現原理剖析
簡析CAS機制與實現原理