Python中的高阶函数:学习如何传递函数作为参数和返回函数对象
发布时间:2023-06-01 04:00:13
在Python中,函数是一等公民,这意味着它们可以像其他数据类型一样传递和返回。高阶函数是利用这一特性的函数,并接受一个或多个函数作为参数和/或返回一个函数对象。
在这篇文章中,我们将介绍如何使用高阶函数来使代码更加简洁和灵活。
传递函数作为参数
一个简单的例子是使用内建函数map()将一个函数应用于一个列表的所有元素:
def square(x):
return x ** 2
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
print(list(squared_numbers))
# Output: [1, 4, 9, 16, 25]
我们传递函数square作为map()的 个参数,并将其应用于列表中的每个元素。
还可以使用另一个内建函数sorted()来根据函数的返回值对列表排序:
def get_last_char(word):
return word[-1]
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=get_last_char)
print(sorted_words)
# Output: ['banana', 'date', 'cherry', 'apple']
我们定义了函数get_last_char,该函数返回单词的最后一个字符。我们将该函数作为参数key传递给sorted()函数,以便对列表进行排序。
返回函数对象
现在,让我们看看如何返回函数对象。
一个示例是返回一个用于计算平均值的函数。我们可以使用闭包来实现:
def avg():
num_list = []
def inner(num):
num_list.append(num)
return sum(num_list) / len(num_list)
return inner
average = avg()
print(average(2))
# Output: 2.0
print(average(4))
# Output: 3.0
print(average(6))
# Output: 4.0
我们定义了一个avg()函数,该函数返回一个内部函数inner。inner计算一个数的平均值,并将每个输入添加到列表中。
我们调用avg()函数,将其结果赋给average变量。我们多次调用average()函数,每次传递一个数字,并在每次调用后打印结果。
总结
高阶函数是Python中重要的编程工具之一。它们允许我们将函数作为参数和/或返回函数对象,并在编写灵活可重复使用的代码时非常有用。
