回答編集履歴

3

修正

2018/10/04 13:46

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 与えられた関数をcallして初期化します。
5
+ 与えられた関数をcall(呼び出)して初期化します。
6
6
 
7
7
  (ちなみに関数じゃなくても実は良い。pythonでいうcallable、呼び出し可能なものという概念のオブジェクトを渡せば大丈夫です。関数の他に代表的なcallableはクラス(intもlistもクラスです))
8
8
 
@@ -57,6 +57,8 @@
57
57
  ```
58
58
 
59
59
 
60
+
61
+ たったそれだけの仕組みです。
60
62
 
61
63
 
62
64
 
@@ -140,4 +142,4 @@
140
142
 
141
143
 
142
144
 
143
- こんなのを書きたくない、という気持ちを解消してくれます。
145
+ こんなのを書きたくない、という気持ちにこたえてくれます。

2

追記

2018/10/04 13:46

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
 
4
4
 
5
+ 与えられた関数をcallして初期化します。
6
+
5
- 与えられた関数じゃなくても実は良いpythonでいうcallableという概念をcallして初期化しま
7
+ (ちなみに関数じゃなくても実は良いpythonでいうcallable、呼び出し可能なものという概念のオブジェクト渡せば大丈夫です。関数の他に代表的なcallableはクラス(intもlistもクラスで))
6
8
 
7
9
 
8
10
 

1

追記

2018/10/04 13:45

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -91,3 +91,51 @@
91
91
 
92
92
 
93
93
  要するに、「関数オブジェクトっぽく扱える(callできる)ものを渡すと、それを呼び出した結果を初期値にしてくれる」だけです。
94
+
95
+
96
+
97
+ ---
98
+
99
+
100
+
101
+ これがどんな風に便利かというと、
102
+
103
+
104
+
105
+ ```python
106
+
107
+ >>> d = defaultdict(int)
108
+
109
+ >>> d["taro"] += 1
110
+
111
+ >>> d["hanako"] += 2
112
+
113
+ >>> d["taro"] += 3
114
+
115
+ >>> d
116
+
117
+ defaultdict(<class 'int'>, {'hanako': 2, 'taro': 4})
118
+
119
+ ```
120
+
121
+
122
+
123
+ 登録されていないキーでアクセスしたときに勝手に初期値をセットしてくれるおかげで、コードが単純になります。
124
+
125
+
126
+
127
+ ```python
128
+
129
+ if key in d:
130
+
131
+ # keyが入ってるときの処理
132
+
133
+ else:
134
+
135
+ # keyが入っていないときの処理
136
+
137
+ ```
138
+
139
+
140
+
141
+ こんなのを書きたくない、という気持ちを解消してくれます。