所以我正在上一门学习三种主要编程范式的课程。我知道Python使用了函数式和命令式编程范式。在明天的考试之前,我想要寻找Python中每个编程范式的简短示例代码,以更好地理解它们。谢谢!
所以我正在上一门学习三种主要编程范式的课程。我知道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
虽然它并不是真正的函数式编程,但它提供了一种不同的思考问题的方式,这也是我认为你的老师试图要达到的目的。
operator.add
жҳҜеҠ жі•з¬ҰеҸ·+
зҡ„жӣҝд»ЈеҗҚз§°гҖӮ - Yuri Syroreduce
在幕后不是属于命令式编程吗? - tim.rohrer