Hatena::Groupfukuoka-py

taketin.py RSSフィード

2012-01-04

初めてのPython 20章 パッケージインポート 21章 モジュールに関連する高度なテクニック

23:54 | 初めてのPython 20章 パッケージインポート 21章 モジュールに関連する高度なテクニック - taketin.py を含むブックマーク はてなブックマーク - 初めてのPython 20章 パッケージインポート 21章 モジュールに関連する高度なテクニック - taketin.py

20章 パッケージインポート

ディレクトリパスを指定して行うインポートの事を「パッケージインポート」と呼ぶ。

Python のコードを納めたディレクトリの事を「パッケージ」と呼ぶ。


パッケージインポートとは、ディレクトリ名前空間にするものとも言える。

import dir1.dir2.mod

from dir1.gir2.mod import x

上記書式だと、モジュールサーチパスが /dir0 に通っていたとして、

/dir0/dir1/dir2/mod.py

を見る。

※reload もディレクトリ単位でできる



21章 モジュールに関連する高度なテクニック

  • データの隠蔽
    • モジュール内データのカプセル化はできない
    • from * ステートメントで読み込む場合のみ、以下のルールで特定の変数をコピー対象から外す事はできる
      • __all__ 属性に、コピー対象の変数名を列挙する。この宣言をされた変数のみ from * ステートメントでコピーされる ex) __all__ = ["foo", "bar", "baz"] 等
      • 変数名の頭にアンダースコアを付ける ex) _hoge 等。__all__ 属性が設定されていない場合、このアンダースコアが頭に無い変数が全てコピーされる
    • import ステートメントを利用した場合このルールは適用されない

  • 拡張機能を有効にする
    • 次世代バージョンで組み込まれる新機能は、まずは「拡張機能」として扱われる
    • from __future__ import 機能名 で、拡張機能を利用できる


import longmodulename as name

# 以下のコードと同じ
import longmodulename
name = longmodulename
del longmodulename

# from ステートメントも同様
from module import longname as name

  • 相対インポートの構文
    • Python2.5 では . を使う事で、fromステートメントが属するパッケージのモジュールインポートサーチパス(sys.path)内のその他の場所にある同じ名前のモジュールよりも優先になる
    • Python2.6までは . を使わない通常のインポートでは、デフォルトで「ステートメントが属するパッケージ > その他のパッケージ」の順に相対インポートが行われる。
    • Python2.7 では ではデフォルトで絶対インポートとなる(あいまいさを避ける為)。なので、2.6 以下のバージョンを利用する場合は、2.7以降のバージョンに合わせ、from __future__ absolute_import 宣言をしておくのが望ましい



  • モジュールについての注意事項
    • トップレベルのコードはステートメントの順序に注意
      • トップレベルコードは前方参照ができないので、defステートメントは全て上に集めて記述し、その後にロジックを書くのが良い
    • import, from に指定するモジュール名は「変数名」である
    • from によって作られる変数と元の変数の間につながりは無い(コピーとなる為)
    • from * を使うと変数の意味がわかりにくくなる
    • from によってコピーされた変数はリロードの影響を受けない
    • リロードは内部でimportしているモジュールまで自動で行われない
    • 再帰インポートに注意(どうしても再帰インポートが必要な場合は、fromステートメントではなく importステートメントを使用する。モジュールのトップレベルではなく関数内、またはモジュールの最後であれば fromステートメントを使用しても良い)

AlexAlex 2012/08/21 13:46 It's posts like this that make surfing so much plesarue

arfvmjporarfvmjpor 2012/08/21 18:42 5xfI0p <a href="http://ehnxlojxktne.com/">ehnxlojxktne</a>

utszqjjfutszqjjf 2012/08/25 01:44 iWUrRB , [url=http://oofsuqwxnvfx.com/]oofsuqwxnvfx[/url], [link=http://tlpijuivkaae.com/]tlpijuivkaae[/link], http://mkkqjrwykltz.com/

ゲスト



トラックバック - http://fukuoka-py.g.hatena.ne.jp/tksthdnr/20120104