9

関数の内部からモジュールをインポートしようとしていますが、関数の外部で他のすべてのコードの前にインポートした場合と同じように、ファイル全体で使用できるようにしています。関数内にある理由は、スクリプトの構造をあまり制御できないためです。これは、__ builtin__をハッキングしたり、コード全体に必要なものを渡したりすることなく可能ですか?

4

2 に答える 2

9

のようなものはどうですかglobals()["os"] = __import__("os")?

モジュール名は文字列なので、必要に応じてこれをジェネリック関数でラップできると思います。

于 2011-06-14T17:38:22.167 に答える
7

あなたの新しいコメントを見て、これは不必要に聞こえることを強調したいと思います。実際には、通常の方法でスクリプトの先頭にインポートするよりも、関数内にインポートする方がスクリプトを変更しています。それでも、尋ねられた質問に答えるという精神で、私は以前の答えを残します。


global正直なところ、これが正しい方法かどうかはわかりませんが、インポートする前に関数内でモジュール名を宣言すると、グローバル名前空間にインポートされることが簡単に確認できます。

>>> def import_re():
...     global re
...     import re
... 
>>> re
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 're' is not defined
>>> import_re()
>>> re
<module 're' from '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc'>

本当に必要な場合を除いて、これを行わないでください。そして、いわば大きな赤い文字で書いてください。

于 2011-06-14T17:36:42.257 に答える