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

Предупреждение
Я не программист, это не моя основная деятельность. Но так или иначе я применяю программирование в разработке семейств для Ревита, поэтому что-то написать могу. И в данном цикле буду делиться теми знаниями, что получил на практике.
Это значит, что вполне вероятно те способы, которые я показываю, будут неоптимальны, наверняка есть более умные и эффективные с точки зрения времени работы кода способы. Поэтому, если вы хотите прям серьёзное заниматься автоматизацией, не читайте эту и следующие статьи, идите и сразу учитесь на нормального программиста.
Это цикл для говнокодеров, таких же, как я. Для тех, кому надо решить задачу и не так важно, насколько чистый и крутой код получается. Главное — что он работает и решает задачу. Если вы не согласны с таким подходом, закрывайте вкладку и потратьте время на что-нибудь другое.
Недостатки нодов в Динамо
Я выделяю два основных недостатка: последовательность выполнения нодов и сложность обработки многоуровневых списков.
В Динамо ноды выполняются все одновременно. Может, есть какая-то задержка небольшая, но в общем-то они запускают вместе со скриптом сразу все. Вроде как есть какие-то способы, чтобы «затормозить» часть алгоритма, но я их пробовал, у меня не работало.
Из-за этого иногда бывает так, что скрипт отработал, но обработал не всё. Надо запускать ещё раз. Иногда не пару, а несколько раз.
Вторая проблема — иногда обработка в Динамо приводит к тому, что списки становятся с очень большой вложенностью. В них много уровней, иногда это можно побороть через List.Flatten, иногда нельзя — структура ломается. В итоге работать неудобно.
На стыке этих двух проблем есть и третья — все данные обрабатываются целиком, нельзя остановить обработку по какому-то условию. Это приводит к тому, что приходится обрабатывать всё-всё вместе, потом вычленять нужное. Это и замедляет работу алгоритма в общем, и заставляет потом убирать лишнее. Это тоже неудобно.
И для себя я эти вопросы решают переводом части или всего алгоритма в Питон. Потому что внутри кода все операции проводятся последовательно и могут заканчиваться тогда, когда это будет нужно.
Пример. Есть список данных, например, отметки элементов. Вам нужно пройтись по списку, найти ближайшую большую отметку от указанной и дальше уже не искать, вернуть отметку из списка. В Динамо вам придётся обрабатывать весь список отметок, нельзя дойти до подходящей и остановить работу нода.
Фишки Питона
Выделю две особенности: простота синтаксиса и динамическая типизация.
Синтаксис — это то, как нужно писать команды на языке программирования, чтобы они выполнялись. В Питоне это делается довольно легко, надо не забывать правильные отступы ставить и двоеточие в конце некоторых команд.
В целом, современные среды для программирования хорошо подсказывают, поэтому синтаксис — это чисто дело вкуса, как мне кажется. Но по сравнению с тем же Си Шарпом мне писать код в Питоне проще.
Динамическая типизация означает, что в одну и ту же переменную можно напихать любой тип данных. Например, сначала присвоили переменной текстовое значение, а потом присвоили числовое. Питон такое сделать позволяет, но не все языки такие. Тот же Си Шарп требует объявить переменную с конкретным типом данным. Поэтому в переменную можно писать только те данные, что заявили в момент создания.
С одной стороны, это очень удобно, не надо париться типами данных, с другой стороны, это может вызывать ошибки. Но у меня их вроде не было, поэтому отношу это к плюсам языка. Возможно, у меня просто не было больших проектов, где такая типизация могла аукнуться.
В общем, на Питоне писать попроще.
Если вам будет приятно, то на Питоне пишут всякие прикладные программы многие учёные. Они не программисты, они учёные, но им надо обрабатывать данные, и они это делают в Питоне. В том числе, потому что для него много готовых библиотек (типа готовые наборы команд), но и простота синтаксиса и чтения кода тоже играют роль.
В общем, мы не говнокодеры, мы — учёные.
Темы в цикле
В рамках цикла планирую расписать следующие темы:
- Ввод и вывод данных из Питон-скрипта. Условия и циклы. Почти все операции будут со списками чего-нибудь, поэтому без условий и циклов никуда.
- Работа со списками и строками.
- Словари и функции.
- Получение элементов из модели. Работа с Ревит АПИ.
- Получение значений параметров.
- Запись значений в элементы модели.
Пока план такой, по ходу дела могу что-то корректировать.




Могу отнести себя так же к "говнокодерам", т.к. часто прибегаю к использованию чата жпт к написанию пайтон скрипта (но сложные задачи выходит решить, это радует). Стыдно, что даже банально переменные поменять в скрипте лень, потому что не понимаю что и как в нем работает) Так что заранее спасибо за цикл.
Первая статья уже вышла, можете почитать)