2023-12-29

pythonわからん

このpythonプログラム

def func1(f):

 def wrapper():

  print("開始")

  f()

  print("終了")

 return wrapper

def func2():

 print("これは func2です")

func = func1(func2)

func()

実行結果が

開始

これは func2です

終了

なんだけど

なんで最後

func()からdef wrapper()が呼び出されるの?

スコープはどうした?って思ってしま

実際func()をwrapper()に書き換えて実行するとエラーになる

そりゃそうだよねスコープ的におかしいもんね

なのにfunc()だと行ける

returnでwrapperを返したから行けるんだろうけどそれがわからん

returnしたってことはスコープ的にどういう状態なんだ?

func()の階層関係ないってこと?

pythonっていうかプログラムがよくわからん

  • 関数そのものを変数に入れることができる func1(何かの関数)を実行すると、その内部でwrapperという関数が作成され、その関数が戻り値になる wrapperという名前はfunc1内部でのものなのでそ...

    • ありがとうございます もう少し考えてみます

      • こういう表現で伝わるか知らんけどスコープは「名前」に適用される概念だと思うといいよ

  • 関数ポインタみたいなもんでは?pythonわからんけど

  • 関数を抜けたら消滅するというのは「寿命」の話で、どこからアクセスできるのかを示す「スコープ」とは異なる。 wrapper本体の寿命はfunc1を抜けても終わらない。

  • def もらった関数を実行する関数を返す(もらった関数):  def もらった関数を実行する関数():   print("開始")   もらった関数()   print("終了")  return もらった関数を実行する関数 d...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん