機能: .py ファイルと __init__.py ファイル (カスタム モジュール) を含むディレクトリを含む Python 標準モジュールをインポート/導入します。
import module_name[,module1,...]
from module import *|child[,child1,...]
注: import ステートメントを複数回使用すると、指定されたモジュールは再ロードされません。モジュールのメモリアドレスをローカル変数環境に渡します。
例:
pythontab.py
#!/usr/bin/env python #encoding: utf-8 import os print 'in pythontab',id(os)
test.py
#!/usr/bin/env python #encoding: utf-8 import pythontab #第一次会打印pythontab里面的语句 import os #再次导入os后,其内存地址和pythontab里面的是一样的,因此这里只是对os的本地引用 print 'in c',id(os) import pythontab #第二次不会打印pythontab里面的语句,因为没有重新加载
機能: すでにロードされているモジュールを再ロードします。通常、元のモジュールの変更などの特殊な状況で使用されます。モジュールは、再ロードする前にインポートされている必要があります。合格。
import os
reload(os)
説明:
reload はロードされたモジュールを再ロードしますが、最初に使用されていたインスタンスは依然として古いモジュールを使用し、新しく生成されたインスタンスは新しいモジュールを使用します。元のメモリ アドレスは引き続き使用されます。 。輸入。 。フォーマットモジュールがリロードされます。
例:
pythontab.py
#!/usr/bin/env python #encoding: utf-8 import os print 'in pythontab',id(os)
test.py
#!/usr/bin/env python #encoding: utf-8 import pythontab #第一次import会打印pythontab里面的语句 print id(pythontab) #原来pythontab的内存地址 reload(pythontab) #第二次reload还会打印pythontab里面的语句,因为有重新加载 print id(pythontab) #reload后pythontab的内存地址,和原来一样
拡張子:
前述のように、リロード関数は、元のモジュール ファイルの変更に加えて、特殊な状況でのみ使用されます。その他の状況 リロード機能を使用する必要があります。以下にその例を示します。
#!/usr/bin/env python #encoding: utf-8 import sys #引用sys模块进来,并不是进行sys的第一次加载 reload(sys) #重新加载sys sys.setdefaultencoding('utf8') ##调用setdefaultencoding函数
上記のコードは正しいので、次のコードをテストしてください
#!/usr/bin/env python #encoding: utf-8 import sys sys.setdefaultencoding('utf8')
上記のテストは失敗します。setdefaultencoding を呼び出すときに、最初に sys モジュールをリロードする必要があるのはなぜですか?ここでのインポート ステートメントは実際には sys の最初のインポート ステートメントではないため、つまり、これは実際には sys モジュールの 2 番目または 3 番目のインポートである可能性があります。これは sys への単なる参照であり、reload によってのみ再ロードできます。では、なぜリロードする必要があるのに、直接参照すると関数を呼び出すことができないのでしょうか? setdefaultencoding 関数はシステムによって呼び出された後に削除されるため、インポートを通じて参照されるときには存在しません。そのため、setdefaultencoding が使用可能になり、インタープリターの現在の文字エンコーディングが使用可能になるように、sys モジュールを一度再ロードする必要があります。コードで変更されました。次のコードを試してみると、同じエラーが報告されます:
#!/usr/bin/env python #encoding: utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') del sys.setdefaultencoding ##删除原来的setdefaultencoding函数 sys.setdefaultencoding('gb2312')
それで、以前に sys をインポートして setdefaultencoding 関数を呼び出したのは誰ですか?答えは、Python インストール ディレクトリの Lib フォルダーに site.py [python2.6] というファイルがあります。その中に main() --> setencoding() -->sys.setdefaultencoding(エンコーディング)、このsite.pyはPythonインタプリタを起動するたびに自動的に読み込まれるため、main関数は毎回実行され、setdefaultencoding関数は出たらすぐに削除されます。
関数:
import文と同じ関数ですが、__import__は関数でありパラメータとして文字列を受け取るだけなので、その役割は想像できます。実際、import ステートメントはこの関数を呼び出してインポート作業を実行します。 import sys <==>sys = __import__('sys')
Use:
__import__(module_name[, globals[, locals[, fromlist]) ]]) #オプションのパラメーターのデフォルトは globals(),locals(),[]
__import__('os')
__import__('os',globals(),locals(),['path','pip' ]) #from os import path, pip に相当します
注:
通常、この関数は動的読み込み中に使用できます。たとえば、フォルダー内のすべてのモジュールをロードしたいが、その下のモジュール名は頻繁に変更されます。 、この関数を使用してすべてのモジュールを動的にロードできます。最も一般的なシナリオは、プラグイン関数のサポートです。
拡張:
モジュールは文字列を介して動的にインポートできるため、文字列を介してモジュールを動的にリロードすることは可能ですか? reload('os') を試してエラーを直接報告してください。他の方法はありませんか? 直接リロードすることはできませんが、最初にモジュールをアンインポートしてから __import__ を実行してモジュールをリロードすることはできます。次に、unimport 操作がどのように実装されるかを見てみましょう。Python 解釈では、globals()、locals()、vars()、dir() およびその他の関数を通じて、現在の環境にロードされているモジュールとその場所を表示できます。削除できるのは表示のみであるため、インポートを解除することはできません。ただし、sys.modules というモジュールを保存するための別の場所があり、sys.modules を介して、グローバル以外のモジュールも表示できます。 、デフォルトのいくつかの追加モジュールがロードされ、次のステップがアンインポートであることを示します。
りー以上がPython での import reload __import__ の使用法の違いを比較するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。