Можно ли импортировать в глобальную область изнутри функцию (Python)? - PullRequest
8 голосов
/ 14 июня 2011

Я пытаюсь импортировать модуль из функции и сделать его доступным для всего моего файла так же, как если бы я импортировал за пределы каких-либо функций и перед всем другим кодом. Причина в том, что это функция, потому что у меня нет большого контроля над структурой скрипта. Возможно ли это, не прибегая к таким вещам, как взлом __builtin__ или передача всего, что мне нужно, вокруг моего кода?

Ответы [ 2 ]

9 голосов
/ 14 июня 2011

Как насчет чего-то вроде globals()["os"] = __import__("os")?

Полагаю, это можно обернуть в общую функцию, если вы хотите, поскольку имя модуля является строкой.

7 голосов
/ 14 июня 2011

Видя ваши новые комментарии, я хочу подчеркнуть, что это звучит излишне. Вы на самом деле модифицируете скрипт more , импортируя его в функцию, а не импортируя его вверху обычным способом. Тем не менее, в духе ответа на заданный вопрос, я оставляю свой предыдущий ответ.


Честно говоря, я не уверен, что это правильный способ сделать это, но быстрая проверка подтверждает, что если вы объявите имя модуля как 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'>

Не делайте этого, если вам действительно не нужно - а затем, так сказать, пишите большими красными буквами.

...