回答編集履歴
1
追記
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)
|