Python 習得中 – その 6
今回は 5章、モジュールの import の仕方やモジュールの書き方、あとはいくつかの標準ライブラリの紹介です。
手元ではもう概ね読了しています。ブログに書くのは一旦ここまでで終了しようかなと思っています… こうやって書き出すよりいろいろ作って実践していったほうが身につくのは早そうなので…。
モジュールのパッケージ
- ライブラリパスの通ったディレクトリ下にディレクトリを作成
- その下に Python モジュールとして読み込ませるクラスや関数を書いた
.py
ファイルを作成 - ↑と同じ場所に
__init__.py
という名前の空のファイルを作成
ロードするときは、ディレクトリ名が package_dir
で、その配下にある hoge.py
ファイルに定義されたクラスや関数をすべてロードする場合、以下の通りとなる。
from package_dir import hoge # MyHogeHoge クラスのコンストラクタを呼ぶ場合 x = hoge.MyHogeHoge('params', '...')
名前空間はディレクトリ名、ファイル名にがっつり依存するので、ファイル構成は結構気をつけたほうが良さそうです…。
defaultdict
Python の辞書は存在しないキーを指定して参照しようとするとエラーになるので、キーが存在しない可能性がある場合は in
でテストするか get()
メソッド (存在しない場合はデフォルト値が返される) を介する必要があります。これは存在しないキーを指定してもデフォルトでエラーにならない Perl の連想配列の実装に比べて利点だと思うのですが (この挙動のおかげでバグを作りこんでしまうことが Perl の場合は本当に多い)、 defaultdict()
はこの悪しき Perl の連想配列に似た挙動がデフォルトである上に、一度参照してしまうとそのキーにデフォルト値が割り当てられてしまうという最悪な動きをする代物です。
こんなの使うことあるんでしょうか…(´・_・`)
組み込みの辞書よりもスクリプト然としたコードを書くのに向いているのかもしれませんが (本書に示されている独自カウンタのサンプルのような… それもその直後に Counter
を用いたずっと簡潔な書き方を示すことでくつがえ)、その割には冒頭で割と覚えにくい名前のパッケージ名からロードしてあげないといけないのも使い勝手としてはいまいちです。
Counter
積集合、和集合が取れるのがいいですね。
OrderedDict
Perl では古の pseudo hash を思い出しました…(‘A`)
その他
いろいろあるみたいですが、必要に応じて探してくれば良いのかなと思います。
2017 年 4 月 9 日 by 村山 俊之
タグ: Python