欢迎访问宙启技术站
智能推送

Python中的高阶函数(函数作为参数和返回值的函数)

发布时间:2023-06-22 06:33:05

Python中的高阶函数是指那些能够接受另一个函数作为参数或者将一个函数作为返回值的函数。这种函数的存在可以让我们更加灵活地编写代码,同时也能够提高代码的复用性。

函数作为参数的函数称为回调函数。这种函数会被传递给另一个函数,并在执行过程中被调用。典型的例子就是Python内置的sorted函数,它可以接受一个关键字函数作为参数来指定对元素的排序方式。示例如下:

def by_name(t):
    return t[0]

def by_score(t):
    return t[1]

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

print(sorted(L, key=by_name))

print(sorted(L, key=by_score, reverse=True))

在上面的例子中,我们通过通过关键字参数key来指定排序的规则,该参数接收一个函数。在 个print中,我们按照列表中元素的 个元素进行排序,即按姓名字母顺序排序;在第二个print中,我们按照列表中元素的第二个元素进行排序,即按照数学成绩降序排序。

返回函数的函数则是指那些函数能够返回另一个函数对象。这种函数在函数式编程中有很多常见应用。例如,我们可以编写一个返回求和函数的函数,示例如下:

def calc_sum(*args):
    def sum():
        ret = 0
        for i in args:
            ret += i
        return ret
    return sum

f = calc_sum(1, 2, 3, 4, 5)
print(f()) # 15

在上面的例子中,我们定义了一个calc_sum函数,它返回了一个sum函数对象。在sum函数内部,我们定义了变量ret,通过遍历args列表来实现求和操作,并在函数末尾使用return返回计算结果。最后我们把calc_sum函数返回的函数对象赋值给变量f,调用它时返回的就是sum函数对象的计算结果。

Python中的高阶函数如map、reduce、filter等也是常见的应用。这些函数接受其他函数作为参数,并在执行过程中对迭代器对象执行指定的操作。例如,以下代码通过map函数将列表中的元素全部转换为字符串类型:

L = [1, 2, 3, 4, 5]

def int2str(n):
    return str(n)

print(list(map(int2str, L))) # ['1', '2', '3', '4', '5']

在上面的例子中,我们定义了一个int2str函数,即对传入的整数n执行str转换操作。使用map函数时,我们传递了int2str函数和待处理的列表L,返回值是一个生成器对象,可以通过list函数将其转换为列表。

总结:

高阶函数在Python中是一种非常灵活而强大的编程方式。它们使得我们能够将函数作为一等公民来处理,更加方便地编写代码,同时也提高了代码的复用性。在实际工作中,我们应该结合具体的场景和需求来选择适合的高阶函数来使用。