Пусть from module import function
назовем стиль кодирования FMIF.
Пусть import module
называется стилем кодирования IM.
Пусть from package import module
называется стилем кодирования FPIM.
Почему IM + FPIM считается лучшим стилем кодирования, чем FMIF? (См. этот пост для вдохновения для этого вопроса.)
Вот некоторые критерии, которые заставляют меня предпочесть FMIF через IM:
- Краткость кода: он позволяет мне использовать более короткие имена функций и, таким образом, помогать придерживаться 80 соглашений по столбцам на строку.
- Считываемость:
chisquare(...)
выглядит более читаемым, чемscipy.stats.stats.chisquare(...)
. Хотя это субъективный критерий, я думаю, что большинство людей согласится. - Простота перенаправления: если я использую FMIF и почему-то в какой-то момент хочу перенаправить python, чтобы определить
function
изalt_module
вместоmodule
, мне нужно изменить только одну строку:from alt_module import function
. Если бы я использовал IM, мне нужно было бы изменить многие строки кода.
Меня интересуют все причины, по которым IM + FPIM может быть лучше, чем FMIF, но, в частности, мне было бы интересно узнать о следующих пунктах упомянутых здесь:
Плюсы за IM:
- легкость насмешек/инъекций в тестах. (Я не очень разбираюсь в насмешливости, хотя недавно узнал, что означает этот термин. Можете ли вы показать код, который показывает, как IM лучше, чем FMIF здесь?)
- способность модуля гибко изменяться путем переопределения некоторых записей. (Я должен что-то недопонимать, потому что это, по-видимому, является преимуществом FMIF по сравнению с IM. См. Мою третью причину в пользу FMIF выше.)
- предсказуемое и управляемое поведение при сериализации и восстановлении ваших данных. (Я действительно не понимаю, как выбор IM или FMIF влияет на этот вопрос. Просьба уточнить.)
- Я понимаю, что FMIF "загрязняет мое пространство имен", но, не считая негативной фразы, я не понимаю, как это вредит коду каким-либо конкретным способом.
Большое спасибо.