所以我目前正在课堂上学习3种主要的编程范例。我知道python使用了功能和命令式范例。我正在寻找这些范例的python中的简短示例代码,以便在明天的考试之前更好地理解这一点。谢谢!
答案 0 :(得分:16)
鉴于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
函数可以有效地完成与其中任何一项相同的操作。)
答案 1 :(得分:12)
考虑命令性和功能范式之间区别的一种方法是,必须明确地编写操作的顺序(我在这里使用非常松散的语言来使你变得简单)。相比之下,使用函数式编程时,您不是要定义序列,而是要声明要模拟的内容(这就是为什么它有时被称为声明式编程风格)。
因此,在下面的示例中,如果我想确定列表中哪些数字是偶数,我必须显式地编写循环代码,并在强制编码时检查每个数字是否均匀。我不需要在功能示例中这样做。在那个例子中,我只是定义了一个数字是偶数的含义然后我只是将这个抽象/函数应用到列表中。一个简单的衬垫。
两种范式之间存在更多差异,但这应该会给你一个想法。
势在必行:
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))
答案 2 :(得分:0)
你可以用两种方式反转词典:
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
这不是真正的函数式编程,但它确实提供了一种不同的思考解决问题的方法,这就是我认为你的老师正试图解决的问题。