回答編集履歴

1

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

2020/05/03 11:43

投稿

teamikl
teamikl

スコア8690

test CHANGED
@@ -37,3 +37,49 @@
37
37
  関数が終わった後は、この領域はGCにより破棄されます。
38
38
 
39
39
  つまり、このid() を返すのは無効なアドレスを返していることになります。
40
+
41
+
42
+
43
+
44
+
45
+ ----
46
+
47
+
48
+
49
+ 最後まで読んでませんでした、デフォルト引数について追記
50
+
51
+
52
+
53
+ ```
54
+
55
+ def test2(b_boolean,b_list=[]):
56
+
57
+ if b_boolean == True:
58
+
59
+ b_list = [2]
60
+
61
+ return id(b_list)
62
+
63
+ else:
64
+
65
+ return id(b_list)
66
+
67
+
68
+
69
+ # デフォルト引数のid確認
70
+
71
+ print(id(test2.__defaults__[0]) == test2(False))
72
+
73
+
74
+
75
+ ```
76
+
77
+
78
+
79
+ デフォルト引数の値は、関数定義時に
80
+
81
+ `test2.__defaults__` のタプルに実体が格納されます。
82
+
83
+
84
+
85
+ このアドレスの有効期限は、関数test2が存在する間なので、常に同じ値になります。