2010-05-29 3 views
3

Я все еще изучаю python и, играя с pygame, заметил, что я импортирую все модули в импортируемые мной модули, которые я импортировал.Вспоминая импорт в модуле

import pygame 

К примеру у меня есть некоторые классы в отдельном файле, но я должен также импортировать Pygame в этот файл тоже для них работать. Он действительно импортирует код дважды? Будет ли это замедлять мою программу? Или он просто извлекает тот же импорт из кеша, но если это так, зачем мне его снова импортировать?

Есть ли что-нибудь вроде (load) в lisp, которое просто втягивает код, как будто это часть основного файла?

Thank You

ответ

0

Понял!
Хорошо, я нашел то, что искал. Я просто обнаружил, что это неудобно для повторного импорта кода, который я уже импортировал, особенно когда файл не является библиотекой или чем-то еще, просто разделил код. нашел его здесь: http://norvig.com/python-lisp.html

execfile("file.py") 

Ответы моей проблемы совершенно. Он анализирует файл и выполняет код в нем. Используя его, я смог вынести дополнительные операторы импорта, и он отлично работает: D

+0

'execfile()' также фактически * выполняет * код, а второй - нет. –

2

Последующий импорта тянуть кэшированную ссылку на модуль из sys.modules. Им нужно импортировать, чтобы добавить модуль в текущее пространство имен/область.

2

Когда Python импортирует модуль, он сначала проверяет реестр модуля (sys.modules), чтобы узнать, был ли модуль уже импортирован. Если это так, Python использует существующий объект модуля как есть.