Что делает Python не функциональным языком программирования? - PullRequest
0 голосов
/ 10 января 2019

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

Однако, он также имеет первоклассные функции, и все же это не функциональный язык программирования. Поэтому я предполагаю, что это должно быть правдой, что язык программирования может иметь функциональные аспекты (или аспекты другой языковой парадигмы), даже если он не попадает в эту парадигму. Что именно делает Python не функциональным языком программирования? Это проверка того, имеет ли она единственную характеристику, или более, чем проверку нескольких вещей? (Если первое, что является единственным аспектом, который делает Python нефункциональным, или единственным аспектом, который делает Haskell функциональным?)

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Отличный пост уже на SO: Почему Python не очень хорош для функционального программирования?

Утверждение, что python "не" является функциональным языком, проистекает из акцента дизайна языка, предназначенного для поддержки других парадигм функционального стиля (как он был изначально разработан, так и продолжает разрабатываться). Это не означает, что язык не показывает функциональные характеристики, как вы заметили. Существует даже документация по Python, в которой описано, как вы можете использовать язык Python для написания кода в функциональном стиле: https://docs.python.org/2/howto/functional.html

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

Для некоторых интересных связанных чтений, вот сообщение SO, касающееся общей сложности в том, что делает язык чисто функциональным (для практического использования): Существуют ли чисто функциональные Схемы или Лиспы?

В этой статье рассматривается конфликт реальных приложений и технические особенности, которые контрастируют с парадигмой функционального программирования: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.9123

0 голосов
/ 10 января 2019

Python считается функциональным; если вы можете доверять Википедия :

Парадигма Мульти-парадигма: функциональная , императивная, объектно-ориентированная, отражающая

Акцент мой. Это из сводной боковой панели.

И следует отметить, что «FP-ность» языка не является двоичной, она находится на континууме. Насколько я знаю, в Python нет встроенной поддержки для эффективного управления неизменяемыми структурами. Это один большой удар против него, так как неизменность можно считать сильным аспектом FP. Он также не поддерживает оптимизацию хвостовых вызовов, что может быть проблемой при работе с рекурсивными решениями. Как вы уже упоминали, он имеет первоклассные функции и встроенную поддержку некоторых идиом, таких как map / выражения / генераторы, reduce и ленивая обработка данных.

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

...