defで定義した関数に引数を渡さず実行できる仕組み
以下のコードの仕組みが分からず、困っております。
>>>i = 10 >>>def num(arg=i): ... print(arg) ... >>>i = 7 >>>num() 10
上記のコードは、とある教材の問題として出題されたものです。
自分の環境でも本当にこの結果になるのか試し、確かに同じ結果になることは確認しましたが、納得できておりません。
私は、num()に引数を渡していないので、エラーになるという認識でした。
例えば、以下のコードを実行するとエラーになります。
>>>def a(arg): ... print(arg) ... >>>a() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: a() missing 1 required positinal argument: 'arg' >>>a('aiueo') # 引数を渡すとエラー無く実行されます aiueo
なぜエラーにならず、値10が返るのでしょうか。
関数定義の際に、i=10の値が渡り、ローカル変数argに格納されたままになっているということでしょうか。
引数を定義せずに実行できるところに加えて、その点もご教示いただけるとありがたいです。
よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
Python 3.6.5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/11 07:15