回答編集履歴

1

追記

2018/11/11 07:03

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,33 @@
1
1
  **デフォルト引数**という仕組みで、引数を省略可能なのです。
2
2
 
3
3
  参考: [Python チュートリアル » 4.7.1. デフォルトの引数値](https://docs.python.jp/3/tutorial/controlflow.html#default-argument-values)
4
+
5
+
6
+
7
+ > 関数定義の際に、i=10の値が渡り、ローカル変数argに格納されたままになっているということでしょうか。
8
+
9
+
10
+
11
+ いえ、関数オブジェクト自体が値を保持しています。
12
+
13
+ ```Python
14
+
15
+ >>> def func(a, b=10, c=20):
16
+
17
+ ... pass
18
+
19
+ ...
20
+
21
+ >>> func.__defaults__
22
+
23
+ (10, 20)
24
+
25
+ ```
26
+
27
+
28
+
29
+ 呼び出しする度に値が再評価されることはないので、
30
+
31
+ ミュータブルなオブジェクトをデフォルト引数とすると、一見おかしな挙動を招きます。
32
+
33
+ 実例はこちら: [なぜオブジェクト間でデフォルト値が共有されるのですか?](https://docs.python.jp/3/faq/programming.html#why-are-default-values-shared-between-objects)