2014年4月16日水曜日

開発環境

Learning Python (Mark Lutz (著)、Oreilly & Associates Inc)のPART V.(Modules and Packages)、Test Your Knowledge: Part V Exercises 7(Circular imports.)を解いてみる。

その他参考書籍

7(Circular imports.)

対話型セッションで、import recur1について。

  1. 変数xに1を代入。
  2. recur2をインポート
  3. recur2を実行
  4. from recur1 import x
  5. recur1のxを探し、見つける。(x = 1)
  6. recur1のyを探す。
  7. yはまだ定義されていない状態なので見つからない。(エラー発生)

import recur2について。

  1. from recur1 import x
  2. recur1をインポート
  3. recur1を実行
  4. recur1の変数xに1を代入
  5. recur2をインポート(モジュールさえあれば、それを登録するだけで中身は関係ない)
  6. recur1の変数yに2を代入
  7. recur1の実行終了
  8. recur1のxを取得
  9. from recur1 import y
  10. 既に実行終了済のrecur11のyを取得

recur1.pyをトップレベルのスクリプトとして実行した場合は、import recur2が実行される、すなわち、対話型セッションでのimport recur2と同じで上手く動作する。recur2.pyをトップレベルのスクリプトとして実行した場合は、対話型セッションでのfrom recur1 import yの場合と同様に失敗する。

入出力結果(Terminal)

bash-4.3$ python3
python3
Python 3.3.5 (default, Mar 15 2014, 14:51:54) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import recur1
import recur1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "./recur1.py", line 6, in <module>
    import recur2
  File "./recur2.py", line 2, in <module>
    from recur1 import y
ImportError: cannot import name y
>>> quit()
quit()
bash-4.3$ python3
python3
Python 3.3.5 (default, Mar 15 2014, 14:51:54) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import recur2
import recur2
>>> recur2.x
recur2.x
1
>>> recur2.y
recur2.y
2
>>> quit()
quit()
bash-4.3$ ./recur2.py 
./recur2.py 
from: can't read /var/mail/recur1
from: can't read /var/mail/recur1
bash-4.3$ 

0 コメント:

コメントを投稿