開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Python (プログラミング言語)
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について。
- 変数xに1を代入。
- recur2をインポート
- recur2を実行
- from recur1 import x
- recur1のxを探し、見つける。(x = 1)
- recur1のyを探す。
- yはまだ定義されていない状態なので見つからない。(エラー発生)
import recur2について。
- from recur1 import x
- recur1をインポート
- recur1を実行
- recur1の変数xに1を代入
- recur2をインポート(モジュールさえあれば、それを登録するだけで中身は関係ない)
- recur1の変数yに2を代入
- recur1の実行終了
- recur1のxを取得
- from recur1 import y
- 既に実行終了済の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 コメント:
コメントを投稿