Ссылаясь на импорт в модуле - PullRequest
3 голосов
/ 29 мая 2010

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

import pygame

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

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

Спасибо

Ответы [ 3 ]

2 голосов
/ 29 мая 2010

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

2 голосов
/ 29 мая 2010

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

0 голосов
/ 29 мая 2010

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

execfile("file.py")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...