Вы можете поместить его в любом месте в файле до, который вы используете.Вы должныне обычно помещают его в циклы (как это не будет делать то, что вы ожидаете), но может положить его в условные обозначения. Когда выполняется инициализационный код импортированных модулей, вы можете сэкономить немного времени, просто загрузив его, если вы знаете, что он вам понадобится.
Вы могут включить его в функции, но если в функции, то это будет только в пределах этой функции. например
>>> def f1():
... import sys
... print sys.version
...
>>> def f2():
... print sys.version
...
>>> f2()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in f2
NameError: global name 'sys' is not defined
>>> f1()
2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)]
>>> f2()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in f2
NameError: global name 'sys' is not defined
>>>
Хорошее соглашение, которое следует соблюдать, - это разместить его в верхней части файлов, чтобы он всегда был доступен и легко найти.
Вы также можете найти, особенно для тестирования компонентов пакета, которые могут потребоваться для изменения sys.path до импорта, чтобы его можно было импортировать на ранней стадии.
Соглашение Я лично считаю полезным, чтобы все ваши системы импортировались сначала, а затем импортировали пакеты проекта, а затем местный импорт с соответствующими комментариями между ними.
Если вы import
имя_модуля, from
модульimport
подмодуль или import
модульas
псевдоним затем импортировать заказ не должен делать никаких серьезных различий но если вы from
модульimport *
затем все ставки не учитываются as var то модули могут определять одно и то же имя, а последнее - то, что вы получаете - это лишь одна из причин, по которым он не поощряется.
Я читаю это о пространствах имен python: http://www.diveintopython.net/html_processing/locals_and_globals.html Итак, когда вы ссылаетесь на «текущее пространство имен», вы ссылаетесь на «глобальное» пространство имен, а не на «локальное» пространство имен даже если он вызван изнутри функции? –
@EmilDavtyan: нет, я имею в виду текущее пространство имен - то, где выполняется оператор импорта - независимо от того, что это (локаль объекта, глобальный класс оператора класса). –
Посмотрите здесь простой сценарий об импорте и пространствах имен: http://pastie.org/8392105 –