2014年4月6日日曜日

開発環境

Learning Python (Mark Lutz (著)、Oreilly & Associates Inc)のPART V.(Modules and Packages)、CHAPTER 24(Module Packages)、Test Your Knowledge: Quizを解いてみる。

その他参考書籍

Test Your Knowledge: Quiz

  1. __init__.pyは初期化に使われる。(パッケージをインポートした時(初回、あるいはreload時)に自動的に実行される。)
  2. fromステートメント、あるいはasで別名を付けてを使えばいい。
  3. コードが置かれている全てのディレクトリ(cwdは除く)に必要。(Python3.3からはなくてもいい。)
  4. 名前の衝突が起きる場合はfromステートメントではなく、importステートメントを使う必要がある。
  5. python3.xでは、1つ目は絶対パスのmyp0kgで、2つ目は相対パス(同じディレクトリ)でspamを探す。2.xでは、1つ目は相対パス(同じディレクトリ)にあるmypkgで、2つ目は2つ目は相対パス(同じディレクトリ)でspamを探す。
  6. 複数の同じ名前のディレクトリを探すことが出来るような機能。

コード(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 コメント:

コメントを投稿