Одне, що насправді важливо для цього питання (і відповідей), - це те, що, до біса, є функціональне програмування та які найважливіші його властивості. Я спробую висловити своє бачення:
Функціональне програмування дуже схоже на написання математики на дошці. Коли ви пишете рівняння на дошці, ви не замислюєтесь про наказ про виконання. Мутації (як правило) немає. Ти не повертаєшся наступного дня і подивишся на це, а коли зробиш розрахунки ще раз, то отримаєш інший результат (або, може, якщо ви попили свіжої кави :)). По суті, те, що є на дошці, є, і відповідь вже був, коли ви почали записувати речі, ви просто ще не зрозуміли, що це таке.
Функціональне програмування - це багато чого; ви нічого не змінюєте, ви просто оцінюєте рівняння (або в цьому випадку "програму") і з'ясовуєте, що відповідає. Програма все ще є, немодифікована. Те саме з даними.
Я б класифікував такі найважливіші особливості функціонального програмування: а) референтна прозорість - якщо ви оцінюєте те саме твердження в інший час і місце, але з однаковими змінними значеннями, воно все одно означатиме те саме. б) жодних побічних ефектів - як би довго ви не дивилися на дошку, рівняння, яке інший хлопець дивиться на іншу дошку, випадково не зміниться. в) функції теж є значеннями. які можна передавати навколо та застосовувати за допомогою інших змінних або до них. г) склад функції, ви можете виконати h = g · f і, таким чином, визначити нову функцію h (..), яка еквівалентна виклику g (f (..)).
Цей список у моєму пріоритетному порядку, тому референтна прозорість є найважливішою, після якої відсутні побічні ефекти.
Тепер, якщо ви проходите через python і перевіряєте, наскільки добре підтримує мову та бібліотеки ці гарантії ці аспекти - тоді ви вже готові відповісти на власне питання.