開発環境
- 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)、CHAPTER 24(Module Packages)、Test Your Knowledge: Quizを解いてみる。
その他参考書籍
Test Your Knowledge: Quiz
- __init__.pyは初期化に使われる。(パッケージをインポートした時(初回、あるいはreload時)に自動的に実行される。)
- fromステートメント、あるいはasで別名を付けてを使えばいい。
- コードが置かれている全てのディレクトリ(cwdは除く)に必要。(Python3.3からはなくてもいい。)
- 名前の衝突が起きる場合はfromステートメントではなく、importステートメントを使う必要がある。
- python3.xでは、1つ目は絶対パスのmyp0kgで、2つ目は相対パス(同じディレクトリ)でspamを探す。2.xでは、1つ目は相対パス(同じディレクトリ)にあるmypkgで、2つ目は2つ目は相対パス(同じディレクトリ)でspamを探す。
- 複数の同じ名前のディレクトリを探すことが出来るような機能。
コード(BBEdit)
sample.py
#!/usr/bin/env python3 #-*- coding: utf-8 -*- import dir0.temp import sub import sub.temp1 import sub.temp2 print(sub)
dir0/temp.py
#!/usr/bin/env python3 #-*- coding: utf-8 -*- import math as m1 from . import math as m2 try: print(m1.sqrt()) except Exception as err: print(type(err), err, err.args) try: print(m2.sqrt()) except Exception as err: print(type(err), err, err.args)
dir0/math.py
#!/usr/bin/env python3 #-*- coding: utf-8 -*- def sqrt(): print('dir0/math.py') print('sqrt()') return 'Hello, world!'
dir1/sub/temp1.py
#!/usr/bin/env python3 #-*- coding: utf-8 -*- print('dir1/sub') print('Hello, temp1 world!')
dir2/sub/temp2.py
#!/usr/bin/env python3 #-*- coding: utf-8 -*- print('dir2/sub') print('Hello, temp2 world!')
入出力結果(Terminal)
$ ./sample.py <class 'TypeError'> sqrt() takes exactly one argument (0 given) ('sqrt() takes exactly one argument (0 given)',) dir0/math.py sqrt() Hello, world! dir1/sub Hello, temp1 world! dir2/sub Hello, temp2 world! <module 'sub' (namespace)> $ echo '' > dir0/__init__.py $ echo '' > dir1/__init__.py $ echo '' > dir2/__init__.py $ echo '' > dir1/sub/__init__.py $ echo '' > dir2/sub/__init__.py $ python2.7 sample.py dir0/math.py sqrt() Hello, world! dir0/math.py sqrt() Hello, world! dir1/sub Hello, temp1 world! Traceback (most recent call last): File "sample.py", line 7, in <module> import sub.temp2 ImportError: No module named temp2 $
0 コメント:
コメントを投稿