python - Python 中的函数式编程

标签 python functional-programming

函数式编程是Python中的编程范式之一。它将计算视为数学函数的评估,并避免状态可变数据。我正在尝试了解 Python 如何结合函数式编程。

考虑以下阶乘程序 ( factorial.py ):

def factorial(n, total):
    if n == 0:
        return total
    else:
        return factorial(n-1, total*n)

num = raw_input("Enter a natural number: ")
print factorial(int(num), 1)

该代码避免了可变数据,因为我们没有更改任何变量的值。我们只是用新值递归调用阶乘函数。

  • 如果上面给出的函数式编程示例是正确的,那么避免状态意味着什么?
  • 函数式编程是否仅意味着我在进行计算时必须仅使用函数(如上例所示)?
  • 如果给定的示例有误,请提供一个带有解释的简单示例?

最佳答案

该示例对于函数式编程是正确的。 这是一个很好的例子,说明了在 Python 中做什么,因为它效率低下且无法扩展。 Python 没有任何尾部调用优化,因此不应仅使用递归调用来避免命令式循环。如果您真的开始用 Python 进行这种风格的编程,您的程序最终将以运行时错误结束。

您正在描述纯函数式编程,这不是 Python 可以用来做的事情。

Python 在某种程度上支持函数式编程,因为函数是一等值。这意味着函数可以传递给其他函数并作为函数的结果返回。标准库包含大多数函数式编程语言标准库中也有的函数,例如 map()filter()reduce()、以及 functools 中的内容和 itertools模块。

关于python - Python 中的函数式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24949635/

相关文章:

oop - 简单的英语单子(monad)? (面向没有FP背景的OOP程序员)

c# - 函数式编程对覆盖的回答是什么?

function - 如何在 Swift 中创建 _inline_ 递归闭包?

javascript - 在 Javascript 中重写 _.find 函数时得到 "undefined"

python - 如何使用 Python 在 Windows 中获取原始磁盘或 block 设备大小

python - 在 SciPy 中拟合分布时如何检查收敛性

python - 如何使用 sklearn 的 GraphicalLasso 和 NetworkX 从(加权)邻接矩阵估计网络结构?

Python数据框: Create function that makes all values in one column uppercase

python - 在 python 中多重处理 shell 脚本

javascript - 使用 "map"函数返回多个数组