问题的历史
高阶函数的概念来源于函数式编程,自Python一开始就可以使用。它允许构建更抽象、更灵活和更简洁的代码。
问题
许多人低估了将函数作为一等公民的能力。错误发生在函数的传递/返回不正确时,调用错误或代码可读性降低时。
解决方案
在Python中,函数是完整的对象。函数可以作为参数传递,可以从其他函数中返回,并可以存储在集合中。这就是高阶函数的定义。这使得可以实现通用的包装器、回调、装饰器和其他一些模式。
代码示例:
def apply_function(func, value): return func(value) def square(x): return x * x result = apply_function(square, 5) # 将返回25
关键特性:
高阶函数可以返回不仅是函数,还可以是数据吗?
是的,高阶函数是任何接受函数作为参数和/或返回函数的函数。返回值没有限制。
内置函数map返回的是生成器对象还是列表?(Python 3+)
在Python 3中,map返回一个可迭代的生成器对象,而不是列表。要获得列表,需要明确地用list(map(...))包装。
squared = map(lambda x: x**2, [1,2,3]) result = list(squared) # 现在得到[1, 4, 9]
可以将函数赋值给变量并存储在集合中吗?
是的,函数可以赋给变量,可以存储在列表、字典中,并可以作为值通过参数传递。这是Python中的普通对象。
def greet(): print('Hello') a = greet a() # 将调用greet
试图为多个函数实现日志记录而不使用高阶函数导致代码重复和每个单独处理器中的错误。
优点:
缺点:
引入了通用的日志装饰器——所有函数的日志记录变得统一,代码变得更清晰。
优点:
缺点: