Найти - Пользователи
Полная версия: Как корректно использовать import
Начало » Python для новичков » Как корректно использовать import
1
newbiegeek
Добрый день всем.
Подскажите пожалуйста, в чем разница

Отрабатывает корректно
from scipy.stats import norm
phi = norm()

Но если сделать
import scipy as sc
phi = sc.stats.norm()
то этот вариант уже не работает.
Budulianin
from scipy.stats import norm

Python находит пакет scipy, ищет в нём пакет или модуль stats, находит пакет, компилирует в байт код(если ещё нету байт-кода) и исполняет его __init__.py(в нём импортируется norm), после того, как код исполнен, Python добавляет его в наше пространство имён и мы можем работать с ним.
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> from scipy.stats import norm
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'norm': <scipy.stats.distributions.norm_gen object at 0x107aeeed0>, '__package__': None}

import scipy as sc
phi = sc.stats.norm()
Python ищет пакет или модуль scipy, находит пакет и компилирует(если ещё нету байт-кода) его __init__.py, а затем исполняет. В scipy/__init__.py не было упоминания о stats, поэтому sc ничего не знает про него и честно говорит - AttributeError: ‘module’ object has no attribute ‘stats’.
Budulianin
newbiegeek
Как корректно использовать import

Прочитать, как он работает в Python.
Марк Лутц, “Изучаем Python”.
newbiegeek
То есть нельзя вызвать norm из примера через конструкцию from scipy.* as sc

Благодарю за ответ

Книгу скачал, изучаю.
Budulianin
newbiegeek
from scipy.* as sc
Это некорректная запись.
newbiegeek
Читаю учебник Лутца, возник вопрос, подскажите пожалуйста, может я ошибся в примере
scipy.stats это часть scipy модуля, или две разных сущности?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB