'от X импортируют' по сравнению с 'импортом X; X.a'

Похоже, угловой не может ввести модуль из-за исключения - https://docs.angularjs.org/error/ $ injector / modulerr

Трудно сказать, что он мог быть из вашего образа.

9
задан CharlesB 25 February 2013 в 15:29
поделиться

8 ответов

Существует использование для обоих случаев, таким образом, я не думаю, что это - проблема неизбежного выбора. Я рассмотрел бы использование от модуля import x,y,z когда:

  • Существуют справедливо небольшое количество вещей импортировать

  • Цель импортированных функций очевидна при разводе от имени модуля. Если названия являются довольно родовыми, они могут столкнуться с другими и сказать Вам мало. например, наблюдение remove говорит Вам мало, но os.remove вероятно, подскажет, что Вы имеете дело с файлами.

  • Имена не сталкиваются. Подобный вышеупомянутому, но более важный. Никогда не делайте что-то как:

     from os import open
    

import module [as renamed_module] имеет преимущество, что оно дает немного больше контекста о том, что называют, когда Вы используете его. Это имеет недостаток, что это немного более нарушено, когда модуль действительно не дает больше информации и немного менее производителен (2 поиска вместо 1).

Это также имеет преимущества при тестировании однако (например, замене os.open с фиктивным объектом, не имея необходимость изменять каждый модуль), и должно использоваться при использовании изменяемых модулей, например.

import config
config.dburl = 'sqlite:///test.db'

Если бы в сомнении, я всегда шел бы с import module стиль.

5
ответ дан 4 December 2019 в 13:51
поделиться

С существованием следующего синтаксиса:

import some_other_module as some_module

аргумент пригодности для обслуживания стиля 2 больше не релевантен.

Я склонен использовать стиль 1. Обычно, я нахожу, что явно ссылаюсь на импортированное имя пакета только несколько раз в типичной программе Python. Все остальное - методы на объекте, которые, конечно, не должны ссылаться на импортированный пакет.

5
ответ дан 4 December 2019 в 13:51
поделиться

Я предпочитаю import X и затем используйте X.a как можно больше.

Мое исключение центрируется на глубоко вложенных модулях в большой платформе как Django. Их имена модуля имеют тенденцию становиться длинными, и их примеры, которые все говорят from django.conf import settings сохранить Вас ввод django.conf.settings.DEBUG везде.

Если имя модуля глубоко вкладывается, то исключение должно использовать from X.Y.Z import a.

2
ответ дан 4 December 2019 в 13:51
поделиться

Я обычно использую порог для решения этого. Если я хочу использовать много вещей в some_module, Я буду использовать:

import some_module as sm
x = sm.whatever

Если существуют только одна или две вещи, мне нужно:

from some_module import whatever
x = whatever

Это предполагает, что мне не нужен a whatever от some_other_module, конечно.

Я склонен использовать as пункт на импорте так, чтобы я мог уменьшить свой ввод и substitue другой модуль довольно легко в будущем.

2
ответ дан 4 December 2019 в 13:51
поделиться

Я нахожу что нотация

from some_module import some_symbol

работы лучше всего в большинстве случаев. Кроме того, в случае столкновения имени для символа можно использовать:

from some_module import some_symbol as other_symbol

Как вопрос указывает, он старается не переписывать имя модуля все время, каждый раз с риском ввода с опечатками его. Я использую синтаксис:

import  module [as other_module]

Только в двух случаях:

  1. Я использую слишком многие функции/объекты модуля для импорта их всех
  2. Модуль определяет некоторый символ, который может измениться во время выполнения
1
ответ дан 4 December 2019 в 13:51
поделиться

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

import module  

или модуль импорта как модификация

Только реальное различие - когда у меня есть модуль с единым классом, это использовало много. Если у меня был sublclassed a list введите для добавления некоторого funcionality там, я использовал бы

from SuperImprovedListOverloadedWithFeatures import NewLIst
nl = NewList()

и т.д.

0
ответ дан 4 December 2019 в 13:51
поделиться

Я склонен использовать только несколько членов каждого модуля, таким образом, существует много из

from john import cleese
from terry import jones, gilliam

в моем коде. Я импортирую целые модули (такой как os или wx) если я ожидаю использовать большую часть модуля, и имя модуля коротко. Я также импортирую целые модули, если будет конфликт имен, или я хочу напомнить читателю, с чем связана та функция.

import michael
import sarah

import wave

gov_speech = wave.open(sarah.palin.speechfile)
parrot_sketch = wave.open(michael.palin.justresting)

(Я мог использовать from wave import open as wave_open, но я изображаю это wave.open будет более знакомо читателю.

0
ответ дан 4 December 2019 в 13:51
поделиться

Я верю в более новые версии Python (2.5 +? должен проверить мои факты...), можно даже сделать:

import some_other_module as some_module

Таким образом, Вы могли все еще пойти со стилем 1 и загрузить другой модуль позже.

Я думаю, что это обычно отображается на то, насколько Вы хотите загромоздить свое пространство имен. Вы будете просто использовать одно или два имени в модуле? Или все они (from x import * не всегда плохо, просто обычно)?

0
ответ дан 4 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: