検索

ホームページ  >  に質問  >  本文

python2.7 - Python関数またはクラスコードの実行順序

質問は変更されました。例 3 を見てみましょう

単純な制御ステートメントの場合は、

リーリー

x > 0 と判断された場合、else ステートメントは実行されないことは誰もが知っています。

Python はインタープリタ型言語です。関数の場合は例 1

リーリー

以下は、正しいかどうかはわかりませんが、私の理解です。

1、Java の場合、コード行 test1() が関数 test1 の呼び出しを実行しない場合、プログラム全体は基本的に無意味となり、メモリ割り当ては行われず、実行も行われません。ただし、Python の場合、test1 関数オブジェクトが作成され、test1 の一連の操作が保存されます。これらの操作は実行されません。プログラム全体が test1 を呼び出さなくても、プログラムが実行されている限り、が終了しない場合、test1 は常にメモリ内に存在します。

その理由は、プログラムの実行後、関数 test1 が現在のモジュール オブジェクト、つまり
module __main__
の属性になるためです。 3. 関数名「test1」については、この関数オブジェクトを参照しているため、関数が呼び出されなくても、ガベージ コレクション メカニズムはそれをリサイクルしません
入れ子関数の例 2

リーリー

例 1 について、私の理解は間違っていますか?

比較例2のtest1の内部関数test2はどうなっているでしょうか?呼び出しの有無で違いはありますか?

前の問題は明確に説明されていないかもしれません。ここに別の例があります 3

リーリー

上記の出力は 2 であり、これは理解できますが、他の出力はなぜ 1 なのでしょうか?

リーリー

現在の質問は、test3 の内部関数 test4 はメモリ内にあるのかということです。もしそうなら、どこでしょうか? (メモリにあるはずだと思います)そうでない場合、なぜtest4がないのでしょうか? test4がない場合、上記のコードを修正したらどうすればよいでしょうか?

リーリー

質問を修正したときに、内部関数の定義方法と使用方法は誰もが知っているかもしれないので、プログラミングにとって実用的な意味はないのではないかと突然思いました。しかし、誰かが私の質問に答えてくれることを願っています

習慣沉默習慣沉默2729日前803

全員に返信(1)返信します

  • PHP中文网

    PHP中文网2017-06-12 09:27:49

    将来的には、この質問を 2 つの異なる質問に分割することをお勧めします。
    (1) この関数は呼び出されません。Python には参照カウントという別のメモリ管理戦略があります。「原則: オブジェクトが他のオブジェクトによって参照された回数を記録します。このオブジェクトへの参照が削除されると、参照カウントも記録されます」 0 に減少すると、オブジェクトは解放されます。」したがって、参照カウント中にリサイクルされるべきだったと思います。

    (2) 呼び出されるかどうかは、オブジェクトの参照が削除されているかどうか、および参照サイクルがあるかどうかによって決まります。ここの電子メール ディスカッション スレッドにも同様の議論があります。それがあなたの質問に答えているかどうかはわかりません。

    返事
    0
  • キャンセル返事