2017-01-18 22 views
0

Я пришел к выводу, что разделение одной функции на файл лучше, чем группировка связанных функций только в одном файле.Почему я должен группировать связанные функции в одном файле?

Я не могу поверить, что программисты на Python считают, что проще 10 файлов вместо 10 файлов с 1 функцией.

ЯВЛЯЕТСЯ БОЛЬШЕ ясным, каждый файл имеет одну функцию и зависимости, необходимые для выполнения функции.

Я нахожу себя мучительным, когда я работаю в файле с несколькими функциями, я не могу обратить внимание.

Плюсы этой конструкции:

  1. Если я просто одну функцию на каждый файл, это более ясно, какие зависимостей функции нужно запустить.
  2. Легче читать, если у вас нет всего этого кода.
  3. Я могу четко мыслить, когда создаю функцию, так как у меня нет отвлечение внимания на другие функции.

Кроме того, с этим типом конструкции я могу анализировать файлы и накладывать на них графические изображения, показывающие, как функции соотносятся друг с другом и с каждой зависимостью каждой функции.

Я ищу этот дизайн в питона пакетов, но я не нахожу какой-либо, только в Node.js и C/C++

Эта конструкция является очень распространенным явлением в Node.js и C/C++ программистов, Почему бы не использовать его в python?

Решение проблем импорта проще, я просто положить в моей INIT .py:

from .some_func import some_func 
from .some_func2 import some_func2 

Тогда я просто сделать это, когда мне нужно импортировать мой пакет:

from some_func import some_func 

Перед кто-нибудь сказать это медленное использование одной функции для каждого файла, это неверно, поскольку python не импортирует один и тот же файл два раза.

Спасибо.

+0

Это было опасно, но как указано здесь: http://stackoverflow.com/questions/10501724/how-does-python-importing-exactly-work, это не так. –

+0

Ну, если у меня есть класс, то все методы этого класса должны находиться внутри одного и того же файла. – tburrows13

+0

@Gloin True, в этом случае у меня будет один класс для каждого файла. –

ответ

2

Это зависит от масштаба вашего проекта. В корпоративных проектах типичное изменение будет касаться или опираться на знание примерно 100 функций, обычно не написанных самим собой. Чтение и понимание кода с каждой функцией в отдельном файле слишком сложно. И хотя у вас может быть редактор, который эффективно работает со 100 вкладками и переключателями между файлами, большинство ваших коллег, вероятно, не будут или должны будут привыкнуть к радикально новой среде. Затем у вас есть изменения, которые выполняются для нескольких связанных функций. Предположим, вы переименовываете все экземпляры переменной в модуль с 25 функциями. Вместо поиска и замены вам нужно написать скрипт, который заменит текст в 25 файлах. Как узнать, какие файлы выбрать? Таким образом, необходимо будет создать целый новый набор инструментов для эффективной работы.

0

Там нет права или неправильно подхода к этому, есть только вкус, что такое простой способ для вас, чтобы иметь дело с проектом вы владеете и требованиями, не принадлежащий проекту.
Иногда руководящие принципы применяются в отношении какого-либо проекта, к которому вы вносите свой вклад, поэтому у вас нет выбора. Ради вопроса, давайте предположим, что вы работаете над своим собственным проектом.
Давайте пройдемся по каждому из ваших заявлений, и давайте, если ваш выбор дизайна является лучшим или не имеет недостатков, и т.д.

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

Какое определение лучше в этом случае?
Вы испытали это, написав и прочитав проекты в обоих направлениях (проекты состояли из нескольких функций, сгруппированных в один файл, а проекты - у вас была только одна функция для каждого файла).

Я не могу поверить, что программисты на основе python считают, что проще 10 файлов вместо 10 файлов с 1 функцией.

Почему бы и нет? Всё зависит от меня. Зависит, например, от количества функций, от того, насколько они велики (с точки зрения количества строк кода) и как они каким-то образом связаны с функциональными возможностями, которые они предоставляют.
Лично, к примеру, я предпочел бы смотреть на файлов друг с 10 функций в нем тогда держать около различных файлов. И обратите внимание на использование слова «лично».
Если у вас нет хорошей IDE, которая действительно звездная, эта модель функции для каждого файла не масштабируется. Кроме того, для очень больших проектов я не думаю, что файловая система вашего компьютера была бы слишком счастлива.

Плюсы этой конструкции:
Если я просто одну функцию на каждый файл, это более ясно, какие зависимостями функции нужно запустить.
Легче читать, если у вас нет всего этого кода.
Я могу четко мыслить, когда создаю функцию, так как у меня нет отвлечения внимания на другие функции.
Кроме того, с этим типом конструкции я могу разобрать файлы и наплевать графику, показывающую, как функции соотносятся друг с другом и с каждой зависимой функцией, необходимой каждой функции.

Все это правда, но подходит для небольших проектов; например, для анализа зависимостей, которые вы бы не делали вручную, в любом случае вы бы использовали очень хороший анализатор, чтобы получить все зависимости между функциями.

Эта конструкция является очень распространенным явлением в Node.js и C/C++ программисты

Я не могу говорить за node.js, но я могу вам сказать, что это не верно для C/C++ проектов C, как вы сказать.
Например, тон проектов в C/C++, даже если они не используют классы, они определяют несколько функций в одном файле (см., Например, Boost или многие другие, чтобы иметь идею).
Возможно, вы смешиваете функции с классами: это правда, что во многих проектах на C++ у вас будет один класс для каждого файла, но внутри этого файла вы, вероятно, будете иметь множество методов (функций) класса, а не только одного!

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

, если у вас есть элементы 300 Мебельных (функция), вы бы разместить их одну за ящик (файл), для которого вам понадобится 300 ящиков, или вы бы попытались сгруппировать их в соответствии с их использованием (все штаны, все футболки и т. д.), используя меньший набор ящиков?

Не было бы легче искать их и думать о них в соответствии с их функциональными возможностями?
I думаю, большую роль играют размер или масштаб проектов, которые вы разрабатываете/вносите, ваш вкус и в конечном итоге требования к дизайну, установленные внешним проектом.
Опять же, вы можете сделать это в своем коде, и никто не говорит, что НЕ МОЖЕТ быть сделано таким образом.
Сделайте это, поскольку вам легче разобраться с вашим кодом!

0

Для индивидуального программиста это вопрос предпочтения. Для рабочих параметров, когда несколько человек кодируют один проект, группировка связанных функций в один файл имеет смысл.

Предположим, что я кодирую проект, который включает в себя получение данных из Интернета различными способами, а затем анализ данных с использованием ряда различных инструментов. Проект расширяется до такой степени, что мой босс говорит: «Хорошо, Реджинальд, я назначил Сьюзен работать с вами на этом, она может провести анализ данных. Вы сосредоточены на сборе данных».

Легче сказать: «Отлично! Вот файл, в котором есть все функции, связанные с анализом», чем сказать: «Отлично! Позвольте мне собрать двадцать или около того, возможно, двенадцать, а может быть, 23 файла с функциями I, которые являются аналитическими ..... »

Умножьте эту ситуацию в десять раз или более для более сложных проектов. Вы будете иметь сотни файлов, плавающих среди десятков программистов. В какой-то момент необходимо также разрешить доступ к определенным файлам и функциям. Функции, сгруппированные в файлы, намного проще.

0

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

Для примера: я создал файл с именем file_operations.py с именем функции read_file, write_file, append_file, delete_file и т.д.

Так что преимущество писать так, как это есть:

  • Когда ты отлаживают ваш код, если какая-то ошибка возникает из-за файла, вам просто нужно посмотреть на этот модуль.
  • Заявки на импорт выглядят более читаемыми. пример.

    from file_operations import read_file, write_file

Есть много преимуществ, пишущих в этой манере.

Надеюсь, это поможет!