pythonのimportについて

2012 ワード

動的ロードモジュール:
使用__import__
c=__import__('sys')


に等しい
import sys


ただし、前者は実行時に決定できます.
 
静的ロード:
つまり通常のimport
from xxx import yyy


or
import xxx.yyy

xxxの最小粒度はファイルであり、yyyの最小粒度はファイル内のクラス/変数/関数である.
importオブジェクトの検索順序:
1. sys.path
ここからロードされるのでsysを変更できます.pathは探している範囲を修正します.
2.相対パス
  Pkg--__init__.py
    |----mod1 ----__init__.py
       |            |-mod1.1.py
       |            |-mod1.2.py
       |-mod2-----__init__.py
                    |-mod2.1.py
                    |-mod2.2.py
一つの問題に注意する.現在、明確な相対パス(explicit relative path)を使用している場合、ポイント番号を使用している場合は、現在のモジュールを直接実行しないでください.エラーが発生するため:ValueError:Attempted relative import in non-package.詳細はここを参照してください.
例えばmod 2.2.py中
from . import mod2.1#  1

from .mod2.1 import *#  2


  
このほかにも、ポイント番号を使用せずにpython自身が相対パスを検索できるようにする暗い相対パス(implicit relative path)があります.----この方式は推奨されない.
同じmod 2です.2.py中
from mod2.1 import *#or

import mod2.1


  
相対パスはあまり推奨されていません.ここを参照してください.提案常に絶対パスを使用.
mod2.2.py
from Pkg.mod2.mod2.1 import *# or

import Pkg.mod2.mod2.1 as some_short_sig


  
 
 
いつfrom module importを使うべきですか?
  • モジュールのプロパティとメソッドに頻繁にアクセスし、モジュール名を何度も入力したくない場合は、from module importを使用します.
  • 他の属性やメソッドを選択的にインポートしたい場合は、from module importを使用します.
  • モジュールに含まれるプロパティとメソッドがモジュールと同じ名前の場合は、import moduleを使用して名前の競合を回避する必要があります.
  • の量はfrom module import*を少なくします.特殊な関数や属性がどこから来たのかを判定するのは困難で、デバッグや再構築がさらに困難になります.

  •