開発環境
- 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 コメント:
コメントを投稿