2012-02-02 3 views
0

Возможный дубликат:
Should wildcard import be avoided?Преимущества `от Foo импорта spam` над` из Foo импорта * `

Какие преимущества from foo import spam предложение над from foo import * кроме не импортировать все функции?

Сохраняет ли память? Или это просто синтаксический сахар, но на самом деле импортирует все? Где я могу найти больше об этом?

Если это экономит память, как это работает?

+1

'from foo import *' будет импортировать все в foo - глобальные vars, методы, классы, включает в себя включение foo, в то время как 'from foo import spam' будет импортировать только' спам'. Представьте себе модуль с сотнями переменных и методов - вы хотите импортировать «спам», чтобы остановить конфликты имен, а также помочь в использовании производительности и памяти. – TyrantWave

+0

Чтобы ответить на один конкретный вопрос (это НЕ точный * дубликат): Относительно памяти, это не имеет значения. Процесс импорта точно такой же, но процесс привязки впоследствии является разницей. – glglgl

ответ

2

Импорт * будет импортировать все, что присутствует в foo, , где импорт спама будет импортировать только необходимые атрибуты.

Это похоже на использование неиспользуемых переменных/методов в коде. Если вы начинаете оценивать свой код, используя что-то вроде pylint, имеющие неиспользуемые переменные и метод понижает рейтинг

1

Если вам нужно все или большинство foo тогда from foo import * лучше, но если вам нужно только spam тогда from foo import spam будет выполнять работу для тебя.

3

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

1

Помимо других причин, одна вещь импорт формы: from foo import spam помогает в том, что он улучшает читаемость кода. Посмотрев вышеприведенное утверждение, ясно, какой модуль текущего тока зависит от модуля foo.

Смежные вопросы