Форум сайта python.su
RodegastТабуляция выглядит по-разному в разных редакторах. Обычное дело, когда она выглядит как восемь пробелов. А чтобы табуляция выглядела короче восьми пробелов, нужно делать дополнительные настройки редактора.
2) Не надо считать пробелы.
RodegastУ меня табуляция в Go используется, потому что там автоформатер, корректирующий синтаксис, меняет все отступы на табуляцию. Так я в режиме для Go настроил внешний вид табуляции на длину в четыре пробела. Но если открыть такой код на GitHub'е, то мы видим, что там даже в окно браузера не помещается обычный, несложный код на Go, потому что там тоже много конструкций, требующих вложенности по пять уровней и даже больше - семь, восемь. Там есть анонимные функции, которые прямо внутри блоков принято делать. Короче, пять уровней для Go - обычное дело, хоть там и классов нет, как в питоне. И вот табуляции в таком коде дают о себе знать. Читать дискомфортно. Приходится код скачивать к себе, открывать своим редактором, который укоротит отступы при отображении, и после этого код становится читабельным.
Вот я сейчас попробовал это проделать в Geany, по нажатию на Tab он как и положено ставит табуляцию
RodegastДля этого есть “cat -vet”, grep и sed. Проблем никогда не испытывал, потому что всегда могу посмотреть, есть ли хоть одна смесь, и всегда могу быстро заменить все табуляции в файле на четыре пробела одной командой. Всегда это делал и проблемы уходили.
в итоге пробелы и табуляция смешивается что не допустимо
RodegastЯ изучал разные стили и остался на четырёх пробелах. Умею также и настраивать табуляцию для себя, но создаю файлы с четырьмя пробелами. Они надёжные, простые, не требуют дополнительных действий, их легко заменить на что угодно, они всегда видны в том виде, в котором записаны.
3) На табуляцию я не переходил. Я ей постоянно пользовался.
Отредактировано py.user.next (Апрель 29, 2018 00:05:27)
Офлайн
druidich92Если код заставляет думать при его чтении, это плохой код. Вот у тебя возвращаемое значение заставляет думать “что возвращается?”. При этом надо отбросить все предположения, что мол “я помню, что там возвращается”. Надо писать так, что ты не помнишь, не знаешь, и вообще не понимаешь. Это полезно и для случая, когда твой код будет читать абсолютно чужой человек, который не может ничего помнить про него, и для случая, когда таким человеком станешь ты сам. Это парадоксально, у тебя может возникнуть вопрос “да как же я могу забыть свой собственный код?”, но ты его забудешь сразу же, как только напишешь точно такую же, но уже другую программу, в которой всё то же самое делается с теми же именами, с теми же функциями и методами. Ты просто начнёшь путать, что было в какой программе, и тебе рано или поздно придётся по собственным комментариям пытаться понять свой собственный код в данном конкретном месте. Ты не будешь ничего помнить, потому что ты не сможешь правильно относить воспоминания. Ты будешь помнить функцию, но не будешь помнить, из какого она проекта. Ты будешь помнить комментарий, но не будешь помнить, когда ты его писал. То есть восстановить всю цепочку написания программы ты не сможешь. У тебя будет десять программ и в каждой ты будешь путаться.
можете подсказать, как этот код можно сделать более читаемый?
Отредактировано py.user.next (Апрель 29, 2018 00:18:52)
Офлайн
> Табуляция выглядит по-разному в разных редакторах.
Меня это не напрягает.
Офлайн
Rodegast
1) Geany адекватен? …
2) Это нормальная практика когда на свои серверы люди притаскивают свои конфиги vim/emacs.
>> Меня это не напрягает.
Слушай, да для тебя и английский не нужен, и еще куча всего того странного что ты на этом форуме высказал. Ты здесь представитель “иного” мышления, и я очень сильно подбирал слова.
Мое мнение что ты не адекватен. Посему зарекаюсь больше не вступать с тобой в дискуссии. Да да тебе оно и не надо и вообще фиолетово. Я больше сказал это что бы публично было.
Офлайн
Rodegast
1) У тебя не функция, а метод.
2) Документация не соответствует действительности
3) Давай переменным короткие имена
4) Для отступов используй табуляцию
5) Используй переносы в словарях и списках
6) Изменяемое состояние это зло. Не надо его так агрессивно использовать! В место списков izo_paraphine_data и norm_paraphine_data создай 4 списка и нормально заполняй их не пользуясь индексами.
P.S. PEP8 это анахронизм не используй его.
Офлайн
> Geany адекватен? …
А ХЗ, это первое что мне попалось. Смысл в том что я не привязан к редактору/IDE. Я хоть в блокноте могу исходники редактировать и у меня с отступами проблем не будет.
> Это нормальная практика когда на свои серверы люди притаскивают свои конфиги vim/emacs.
На свои перетаскивают, а на чужие нет.
> Ты здесь представитель “иного” мышления
Совершенно верно. Я не мыслю шаблонами! Вот тебе какой-то “дядя” дал установку что отступ должен быть только пробелами и ты этому слепо следуешь, хотя табы дают ряд преимуществ. Надо ко всему относится критически.
> 3- встречал наоборот суждение, что лучше давать нормальные осознанные имена.
Имя должно быть в первую очередь осмысленным, по этому тебе и писали что например не надо использовать однобуквенные имена. Но длинные имена тоже плохи, они более сложны для восприятия. По этому необходимо давать осмысленные имена минимальной длины. Например у izo_paraphine_data и norm_paraphine_data можно отбросить общую часть имени и будет просто izo и norm.
> 6 - не понимаю что за изменяемое состояние.
Это в первую очередь изменяемые объекты. Я не буду рассказывать почему это зло (вот можешь тут подробности почитать http://fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/ ), но в императивном программировании без него не обойтись и работать с ним надо предельно аккуратно. Например ты создаёшь список содержащий 2 списка, потом их изменяешь обращаясь по индексам, а потом “вытаскиваешь” эти списки из общего списка и формируешь результат. Очевидно что эту конструкцию лучше заменить четырьмя одномерными списками.
Отредактировано Rodegast (Апрель 29, 2018 13:56:38)
Офлайн
Rodegast
а можно еще совета попросить. Уже в плане алгоритма.данный метод у меня почти дублируется. только в одном случае он работает когдаdef paraphine_distribution(self): ''' распределение всего состава по 3 группам: нормальные парафины, изопарафины и водород. Учитываются компоненты, частота появления которых не равно нулю :param data: входные данные :type data: calculate_file ''' izo_component = [] izo_quantity = [] norm_component = [] norm_quantity = [] h2_component = [x for x in np.linspace(-300, -250, 6)] h2_quantity = [random.randint(0, 30) for x in range(0, 6)] h2_quantity[2] = 100 for i, item in enumerate(self.full_components): if self.full_composition[-1][i] != 0: if item in self._criterion_norm_paraphine: norm_component.append(item) norm_quantity.append(self.full_composition[-1][i]) elif item in self._criterion_izo_paraphine: izo_component.append(item) izo_quantity.append(self.full_composition[-1][i]) izo_composition = { 'x': np.array(izo_component), 'y': np.array(izo_quantity) } norm_comosition = { 'x': np.array(norm_component), 'y': np.array(norm_quantity) } h2_composition = { 'x': np.array(h2_component), 'y': np.array(h2_quantity) } return izo_composition, norm_comosition, h2_compositionа в другом когдаif self.full_composition[-1][i] != 0:а все остальное - одно и тоже…. как с этим можно поступить ?if self.full_composition[-1][i] == 0:
Офлайн
Самое очевидное решение этой проблемы это создать предикат и передавать его в метод как параметр:
def paraphine_distribution(self, test): .... if test(i): .... .... self.paraphine_distribution(lambda i: self.full_composition[-1][i])
Отредактировано Rodegast (Май 1, 2018 18:58:24)
Офлайн
Rodegastблин, как то не удобно. Знаю что класс то еще …. если я выложу, вы сможете дать советы как его улучшить ?
Самое очевидное решение этой проблемы это создать предикат и передавать его в метод как параметр:
Офлайн
Выкладывай. Помогу чем смогу…
Офлайн