0

私は作成a.pyし、b/__init__.py:

    $ ls
    $ cat > a.py
    import b
    print "a"
    $ mkdir b
    $ cat > b/__init__.py
    print "b"

期待どおりに動作します:

    $ python a.py 
    b
    a

一番上のフォルダーを削除b/__init__.pyして作成します。b.py

    $ rm b/__init__.py
    $ cat > b.py
    print "new b"
    $ python a.py 
    b
    a

「新しい b」は表示されず、代わりに「b」が表示されます。なんで?

4

1 に答える 1

4

削除したばかりですb/__init__.pyが、確かに a b/__init__.pycandがあり、まだ b ( )a.pyをインポートしています。import bこれにより、インタープリターは、b/__init__.pycこれを見て同じ順序で出力するため、既にバイトコンパイルされていると想定する可能性があります。

このコマンドrm b/__init__.pyは、フォルダーや.pyc. それが理由かもしれません。

試してみるrm -r bと、コードが期待どおりに動作するはずです。

これは確かに、Python インタープリターで予期される動作です。インタープリターにファイルをバイトコンパイルさせたくない場合は、 -B パラメーターを使用して呼び出すことができますが、バイトコンパイルされたコードによりプログラムの実行速度が大幅に向上するため、これはパフォーマンスの問題にはお勧めできません。

モジュールとバイト コンパイルされたファイル、および検索パスの詳細については、 docs を参照してください。

お役に立てれば!

于 2013-05-24T17:16:27.620 に答える