И так, в предыдущем посте, было рассказано о минусах инструкции from и о том, что использование import более надежней и практичней. Поэтому речь пойдет о использовании import.
Единственное, когда необходимо вместо инструкции from использовать инструкцию import, – когда требуется использовать одно и то же имя, присутствующее в двух разных модулях. Например, когда два файла по-разному определяют одно и то же имя:
# M.py
def func():
...выполнить что-то одно...
# N.py
def func():
...выполнить что-то другое...
и необходимо использовать обе версии имени в программе. В этом случае инструкцию from использовать нельзя, потому что в результате вы получите единственное имя в вашей области видимости:
# O.py
from M import func
from N import func # Перезапишет имя, импортированное из модуля M
func() # Будет вызвана N.func
Зато можно использовать инструкцию import, потому что включение имени
вмещающего модуля сделает имена уникальными:
Единственное, когда необходимо вместо инструкции from использовать инструкцию import, – когда требуется использовать одно и то же имя, присутствующее в двух разных модулях. Например, когда два файла по-разному определяют одно и то же имя:
# M.py
def func():
...выполнить что-то одно...
# N.py
def func():
...выполнить что-то другое...
и необходимо использовать обе версии имени в программе. В этом случае инструкцию from использовать нельзя, потому что в результате вы получите единственное имя в вашей области видимости:
# O.py
from M import func
from N import func # Перезапишет имя, импортированное из модуля M
func() # Будет вызвана N.func
Зато можно использовать инструкцию import, потому что включение имени
вмещающего модуля сделает имена уникальными:
# O.py
import M, N # Получить модуль целиком, а не отдельные имена
M.func() # Теперь можно вызывать обе функции
N.func() # Наличие имени модуля делает их уникальными
Этот случай достаточно необычен, поэтому вы вряд ли часто будете сталкиваться с ним на практике. Но если такая ситуация все-таки возникнет, инструкция import позволит вам избежать конфликта имен.
Фух, за день две статьи, спасибо за подписи, надеюсь количество увеличиться и увеличится количество статей. Ставим + , приглашаем друзей и комментируйте записи.
from M import func
ОтветитьУдалитьfrom N import func # Перезапишет имя, импортированное из модуля M
func() # Будет вызвана N.func
Можно же:
from M import func as m.func
from N import func as n.func # Имя останется уникальным
n.func()
да, верно, спасибо
Удалить