Должны ли все мои модули Python явно импортировать одни и те же базовые модули? - PullRequest
1 голос
/ 27 марта 2012

Например: main.py:

import pygame
import mycolors
color1 = mycolors.blue

mycolors.py:

import pygame
blue = pygame.Color(0, 0, 255)

Мой вопрос, в частности, касается «импорта пигмеев», присутствующего в обоих файлах.Действительно ли необходимо импортировать его в каждый модуль, который в этом нуждается?(ответ, кажется, да, он не будет работать без него.) Кроме того, это на самом деле импортируется дважды?это имеет последствия производительности?

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Модуль импортируется только один раз, поэтому вам не нужно беспокоиться о потраченных впустую ресурсах. Вы можете увидеть все модули, которые были импортированы в любом месте в sys.modules. Когда модуль импортируется второй / третий / и т.д. раз вы просто получаете ссылку на модуль уже в sys.modules

Причина, по которой вы должны импортировать его в оба других модуля, заключается в том, что он добавляется в их пространство имен

Это очень важно в больших программах, когда может быть много модулей с одинаковыми именами, поэтому вы определенно не захотите, чтобы модуль появлялся во всех других пространствах имен, когда вы импортируете его

2 голосов
/ 27 марта 2012

Я не думаю, что это все исходные файлы, которые вы показываете здесь.Как и сейчас, import pygame не требуется в main.py, поскольку вы нигде не ссылаетесь на него в этом модуле.

Что касается производительности: не повредит ощутимо импортировать один и тот же модуль несколько раз,«Реальный» импорт (с возможным шагом компиляции) происходит только один раз.

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