Одна вещь, которая действительно важна для этого вопроса (и ответов), заключается в следующем: что, черт возьми, представляет собой функциональное программирование и каковы его самые важные свойства. Я постараюсь дать свой взгляд на это:
Функциональное программирование очень похоже на написание математики на доске. Когда вы пишете уравнения на доске, вы не думаете о порядке выполнения. Там (как правило) нет мутации. Вы не возвращаетесь на следующий день и не смотрите на это, и когда вы делаете расчеты снова, вы получаете другой результат (или вы можете, если у вас было немного свежего кофе :)). По сути, то, что есть на доске, уже есть, и ответ был уже там, когда вы начали записывать вещи, вы просто еще не поняли, что это такое.
Функциональное программирование во многом похоже на это; вы ничего не меняете, вы просто оцениваете уравнение (или, в данном случае, «программа») и выясняете, каков ответ. Программа все еще там, без изменений. То же самое с данными.
Я бы оценил следующее как наиболее важные особенности функционального программирования: а) ссылочная прозрачность - если вы оцениваете одно и то же утверждение в другое время и в другом месте, но с теми же значениями переменных, оно все равно будет означать то же самое. б) без побочных эффектов - независимо от того, как долго вы смотрите на доску, уравнение, на которое другой парень смотрит на другую доску, не изменится случайно. в) функции тоже значения. которые могут быть переданы и применены, или к другим переменным. г) состав функции, вы можете сделать h = g · f и, таким образом, определить новую функцию h (..), которая эквивалентна вызову g (f (..)).
Этот список находится в моем порядке приоритетов, поэтому прозрачность ссылок является наиболее важной, после чего никаких побочных эффектов нет.
Теперь, если вы пройдете через python и проверите, насколько хорошо язык и библиотеки поддерживают и гарантируют эти аспекты - тогда вы уже на пути к ответу на свой вопрос.