hqt*_*hqt 6 python functional-programming list-comprehension
在我的Python学习书中,当我阅读时List Comprehension
,作者有一个小说明解释:
Python的列表理解是语言对函数式编程概念的支持的一个例子.
我已经去维基百科阅读有关函数式编程的内容.但我很难想象,因为我List Comprehension
在维基页面上没有看到任何关联和这个概念.
请给我一个明确的解释(如果能,请给我一些关于Java或C#函数式编程的例子:D)
如果你的问题是"给我一些展示FP如何在python中运行的例子",那么:
什么是纯函数式编程(在Python中)?
它是一种编程范例,它避免了状态和可变数据,而是依赖于函数返回值.这意味着用python编写的纯函数程序不会有变量,状态等.
不是那么纯粹的FP
您可以将FP和命令式范例结合起来,并获得良好的结果(请参见此处).链接的要点是我几个月前为python类制作的数学测验程序.随意使用代码随意做任何事情.
Java/C#中的FP
我个人没有C#的经验,所以其他人需要发布一个C#示例,但你可以在Java中使用FP,但不能使用纯FP.示例:
int fib (int x) {
if (x < 2) return x;
return fib (x-1) + fib(x-2);
}
Run Code Online (Sandbox Code Playgroud)
上面的方法完全是FP,但在使用Java时不能在纯FP上下文中使用.这需要放在C
Java 中的类中,并且只能在实例化该类型的对象后才能调用.最后一部分取消了Java类的C
FP,但该方法仍然是.
编辑:实际上,您可以在Java中使用静态方法,无需任何实例化即可使用.因此,如果您将签名更改为static int fib (int x)
,则如果以FP方式调用,则方法及其方法调用可能仍为FP.
回复:你的评论
递归可能是FP,但它不一定是(见下文):
def f(first, rest):
print first
first = rest[0]; rest = rest[1:]
f(first, rest)
Run Code Online (Sandbox Code Playgroud)
你也可以没有递归的FP:
def sum (a,b):
return a+b
def square(c):
return c*c
def square_of_sum (x,y):
return square(sum(x,y))
Run Code Online (Sandbox Code Playgroud)
Python 的map()、reduce() 和 filter()接受一个序列,将您选择的另一个函数应用于它,然后向您返回一个不同的序列,保持原始序列不变。
您可以说这是功能性的,因为它不会触及原始序列,不会在内部触及其状态,也不会产生副作用。(尽管您自己提供给它的功能可以执行上述某些操作,例如产生副作用)
函数式编程是一种不同的编程和构建应用程序的方式,以减少由副作用(直接更改另一个静态位置或进程中的某些值)引起的错误,并减少或消除同步访问共享数据的需要。有些语言强迫你这样做,比如erlang和其他语言让你更多地选择当时最适合你的路径(程序或函数),优先选择编程范围的函数方面,比如scala