繁体   English   中英

Python编程功能与命令式代码

[英]Python programming functional vs. imperative code

所以我目前正在课堂上学习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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM