Python 高阶函数:用函数玩出花样

在 Python 里,函数不仅能执行逻辑、组织代码,还能像变量一样被传来传去、当做参数传递,这就为“高阶函数”打下了基础。掌握高阶函数,是写出优雅、简洁、可复用代码的关键一步。

参考文章:Python 高阶函数 | 简单一点学习 easyeasy.me

一、什么是高阶函数?

1.1 函数是“第一类对象”

在 Python 中,函数是“第一类对象”,意味着:

  • 函数可以赋值给变量
  • 函数可以作为参数传递
  • 函数可以作为返回值返回
def greet(name):
    return f"Hello, {name}"

say_hello = greet
print(say_hello("Alice"))  # Hello, Alice

1.2 高阶函数的定义

如果一个函数满足以下任意一个条件,它就是高阶函数:

  • 接收一个或多个函数作为参数
  • 返回一个函数

二、内置高阶函数速览

Python 提供了几个常用的内置高阶函数,非常实用,咱们一个个来看:

2.1 map(): 映射操作

对可迭代对象里的每个元素执行函数操作。

nums = [1, 2, 3, 4]
squared = map(lambda x: x ** 2, nums)
print(list(squared))  # [1, 4, 9, 16]

2.2 filter(): 过滤操作

保留符合条件的元素。

nums = [1, 2, 3, 4, 5]
evens = filter(lambda x: x % 2 == 0, nums)
print(list(evens))  # [2, 4]

2.3 reduce(): 累计计算

来自 functools,把所有元素用一个函数合并成一个结果。

from functools import reduce

nums = [1, 2, 3, 4]
total = reduce(lambda x, y: x + y, nums)
print(total)  # 10

2.4 sorted():自定义排序

key 参数可以传函数,对排序方式进行控制。

words = ["banana", "apple", "cherry"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)  # ['apple', 'banana', 'cherry']

三、函数作为返回值

Python 函数里可以定义另一个函数,然后返回它。可以根据外部参数“动态生成”函数。

def make_multiplier(factor):
    def multiply(x):
        return x * factor
    return multiply

double = make_multiplier(2)
print(double(5))  # 10

这个技巧非常强大,比如可以创建日志包装器、延迟执行函数等。


四、函数作为参数传递

你可以将一个函数作为参数传递给另一个函数,从而定制行为。

def apply_func(x, func):
    return func(x)

print(apply_func(3, lambda x: x ** 3))  # 27

这个模式在很多地方都有用,比如回调函数、策略模式、装饰器等。


五、常见使用场景

5.1 数据处理

高阶函数和匿名函数(lambda)搭配,可以让代码更简洁:

data = ["  hello ", " world ", "Python  "]
cleaned = map(lambda s: s.strip().upper(), data)
print(list(cleaned))  # ['HELLO', 'WORLD', 'PYTHON']

5.2 条件过滤

filter() + lambda 是处理大量数据时的利器:

nums = range(100)
div_by_7 = filter(lambda x: x % 7 == 0, nums)
print(list(div_by_7))

六、组合函数:函数的嵌套与链式调用

高阶函数常用于函数式编程,像流水线一样地组合操作:

from functools import reduce

words = ["python", "is", "awesome"]
result = reduce(lambda x, y: x + " " + y.upper(), words, "")
print(result.strip())  # python IS AWESOME

七、进阶:自定义高阶函数

你完全可以写出自己的高阶函数,来封装常用逻辑:

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(n):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def greet():
    print("Hi!")

greet()

八、总结

  • 高阶函数就是可以接收函数或者返回函数的函数。
  • 它能让代码更简洁、可复用、更灵活。
  • map()filter()reduce() 是最常见的高阶函数应用。
  • 在数据处理、回调、装饰器等场景中,高阶函数非常常用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值