teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

修正

2018/10/04 13:46

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  そのままですよ。
2
2
 
3
- 与えられた関数をcallして初期化します。
3
+ 与えられた関数をcall(呼び出)して初期化します。
4
4
  (ちなみに関数じゃなくても実は良い。pythonでいうcallable、呼び出し可能なものという概念のオブジェクトを渡せば大丈夫です。関数の他に代表的なcallableはクラス(intもlistもクラスです))
5
5
 
6
6
  たとえば、intそのものは、引数なしで呼び出すと、
@@ -28,6 +28,7 @@
28
28
  []
29
29
  ```
30
30
 
31
+ たったそれだけの仕組みです。
31
32
 
32
33
  なので、こんな風に動かすこともできます
33
34
 
@@ -69,4 +70,4 @@
69
70
  # keyが入っていないときの処理
70
71
  ```
71
72
 
72
- こんなのを書きたくない、という気持ちを解消してくれます。
73
+ こんなのを書きたくない、という気持ちにこたえてくれます。

2

追記

2018/10/04 13:46

投稿

hayataka2049
hayataka2049

スコア30939

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

1

追記

2018/10/04 13:45

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -44,4 +44,28 @@
44
44
  'hogehoge~'
45
45
  ```
46
46
 
47
- 要するに、「関数オブジェクトっぽく扱える(callできる)ものを渡すと、それを呼び出した結果を初期値にしてくれる」だけです。
47
+ 要するに、「関数オブジェクトっぽく扱える(callできる)ものを渡すと、それを呼び出した結果を初期値にしてくれる」だけです。
48
+
49
+ ---
50
+
51
+ これがどんな風に便利かというと、
52
+
53
+ ```python
54
+ >>> d = defaultdict(int)
55
+ >>> d["taro"] += 1
56
+ >>> d["hanako"] += 2
57
+ >>> d["taro"] += 3
58
+ >>> d
59
+ defaultdict(<class 'int'>, {'hanako': 2, 'taro': 4})
60
+ ```
61
+
62
+ 登録されていないキーでアクセスしたときに勝手に初期値をセットしてくれるおかげで、コードが単純になります。
63
+
64
+ ```python
65
+ if key in d:
66
+ # keyが入ってるときの処理
67
+ else:
68
+ # keyが入っていないときの処理
69
+ ```
70
+
71
+ こんなのを書きたくない、という気持ちを解消してくれます。