Python编程函数式代码与命令式代码



因此,我目前正在学习3种主要编程范式。我知道python同时使用函数式和命令式范式。在明天的考试之前,我在python中寻找每种范式的简短示例代码,以更好地理解这一点。非常感谢。

给定L = [1, 2, 3, 4, 5],我们可以用两种方法计算和。

强制性:

sum = 0
for x in L:
sum += x

功能(本地功能):

def add(x, y):
return x + y
sum = reduce(add, L)

函数(lambda表达式):

sum = reduce(lambda x, y: x + y, L)

(当然,内置的sum函数将有效地执行与这两个函数相同的操作。)

思考命令式范式和函数式范式之间区别的一种方法是,使用命令式,您必须显式地对操作顺序进行编码(我在这里使用非常松散的语言来简化它)。相反,在函数式编程中,你不是在定义序列,而是在声明你试图建模的东西(这就是为什么它有时被称为声明式编程风格)。

因此,在下面的例子中,如果我想确定列表中哪些数字是偶数,我必须明确地对循环进行编码,并在强制编码时检查每个数字是否是偶数。在函数示例中,我不需要这样做。在那个例子中,我只是定义了数字为偶数意味着什么,然后我只是将这个抽象/函数应用到列表中。一个简单的内衬。

这两种范式之间还有更多的区别,但这应该会给你一个想法。

强制性:

naturalNumbers = [0,1,2,3,4,5,6,7,8,9]
def printEvenNumbers (listOfNumbers):
for x in listOfNumbers:
if x % 2 == 0:
print True
else:
print False

功能:

def evenNumber (x):
return (x % 2) == 0
print(map(evenNumber, naturalNumbers))

您可以通过两种方式反转字典:

def reverse_mapping1(map):
return {v:k for k, v in map.items()}
def reverse_mapping2(map):
inverse = {}
for k, v in map.iteritems():
inverse[v] = inverse.get(v, [])
inverse[v].append(k)
return inverse

这不是真正的函数式编程,但它确实提供了一种不同的思考解决问题的方式,我认为你的老师正试图做到这一点

最新更新