非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python】関数のデフォルト値にグローバル変数を使う場合の注意点

   

Pythonにおいて関数のデフォルト値にグローバル変数が用いられたときに、どのタイミングまでの編集が適用されるかという話です。これを知らないと意図しない値が入ってしまうので覚えておきましょう。

以下のプログラムのようにグローバル変default_messに「Python」という値が入っていて、関数定義の後で(関数呼び出し前に)「World」と書き換えられています。果たしてこのプログラムの実行結果はどうなるのでしょうか?

default_mess="Python"

def Message(mess1="", mess2=default_mess):
  print(f"{mess1} {mess2}")

default_mess="World"
mess="Hello"

Message(mess1=mess)

 

答えは「Hello Python」です。

関数呼び出し前に書き換えられたところは適用されません。

関数のデフォルト値は関数が定義された時点で評価され、呼び出し時に再評価は行われないのが理由です、

 

スポンサーリンク

 - Python