3

プログラムのデバッグに pdb を使用しています。「c」を連続して押してコードを実行すると、各ステップで pdb が実行された行を表示します。

このコードがあるとしましょう:

def foo(bar):
   print(bar)

foo('hey')

まず、4 行目で関数 foo を呼び出します。次に、pdbは私に行を示します

def foo(bar)

実行されます。

なんで?その行は単なるラベルのようなものではありませんか? 「print(bar)」が実行される前に何が起こるか? (別の 's' ヒットが付属しています)

編集:実際に定義をチェックすることを実験しました。実際、foo がジェネレーター (そのような方法で呼び出すことはできません) であった場合でも、python はそこに到達し、それをジェネレーター (または場合によっては関数..) として扱うことを決定します。

4

2 に答える 2

1

「print(bar)」が実行される前に何が起こるか?

これは単なる推測です。現在の IP がスタックにプッシュされ、次にパラメーターがプッシュされると思います。次に、新しいスタック フレームが作成され、パラメータがスタックからポップされ、現在のスコープにローカルとして追加されます。この線に沿った何か。

于 2013-09-13T01:36:56.813 に答える