Python3のデフォルト引数に関する質問となります。
デフォルト引数は、関数の定義時に処理が実行される認識です。
ここで、以下のコードをご覧ください。
Python3
1def nonbuggy(arg, list=None): 2 if list is None: 3 list = [] 4 list.append(arg) 5 print(list)
関数の定義時にlistにNoneが代入されるとすれば、初回の呼び出しでlistには空のリストが代入されます。
次からの呼び出しは、listに空のリストが代入された状態で処理が実行されるため、リストの要素がどんどん増えていく認識でした。
しかし実際に試してみると、仮引数argに指定したオブジェクトしか含まれておりません。
Python3
1>>> nonbuggy('a') 2['a'] 3>>> nonbuggy('b') 4['b']
調べてみますと、listがNoneだった場合に空のリストが代入されたlistは、新しいオブジェクトであるようでした。
これは仮引数のlistと関数内で空のリストが代入されたlistは別オブジェクトということなのでしょうか?
お手数ですがご教授頂けますと幸いです。
宜しくお願い致します。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。