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

回答編集履歴

1

デフォルト引数について説明補足

2020/05/03 11:43

投稿

teamikl
teamikl

スコア8824

answer CHANGED
@@ -17,4 +17,27 @@
17
17
 
18
18
  b_list, c_list はともにローカル変数で、
19
19
  関数が終わった後は、この領域はGCにより破棄されます。
20
- つまり、このid() を返すのは無効なアドレスを返していることになります。
20
+ つまり、このid() を返すのは無効なアドレスを返していることになります。
21
+
22
+
23
+ ----
24
+
25
+ 最後まで読んでませんでした、デフォルト引数について追記
26
+
27
+ ```
28
+ def test2(b_boolean,b_list=[]):
29
+ if b_boolean == True:
30
+ b_list = [2]
31
+ return id(b_list)
32
+ else:
33
+ return id(b_list)
34
+
35
+ # デフォルト引数のid確認
36
+ print(id(test2.__defaults__[0]) == test2(False))
37
+
38
+ ```
39
+
40
+ デフォルト引数の値は、関数定義時に
41
+ `test2.__defaults__` のタプルに実体が格納されます。
42
+
43
+ このアドレスの有効期限は、関数test2が存在する間なので、常に同じ値になります。