函数使用进阶
基础教学 1 min read

函数使用进阶

Blog Author

函数使用进阶


高阶函数:函数也能“操作”函数

✅ 什么是一等函数?

在 Python 中,函数是“一等对象”(First-Class Object),这意味着:

  • 函数可以赋值给变量;
  • 函数可以作为参数传给另一个函数;
  • 函数可以作为另一个函数的返回值。

支持这些特性的函数,称为“高阶函数(Higher-Order Function)”。


✅ 应用场景:灵活扩展运算逻辑

我们定义一个通用的 calc 函数,它不只做加法,而是可以接收不同的“运算函数”作为参数,从而支持多种运算。

def calc(init_value, op_func, *args, **kwargs):
    items = list(args) + list(kwargs.values())
    result = init_value
    for item in items:
        if type(item) in (int, float):
            result = op_func(result, item)
    return result

运算函数定义

def add(x, y): return x + y
def mul(x, y): return x * y

使用方式

print(calc(0, add, 1, 2, 3))      # 输出 6(求和)
print(calc(1, mul, 2, 3, 4))      # 输出 24(乘积)

使用 operator 标准库简化

import operator


print(calc(0, operator.add, 1, 2, 3))  # 6
print(calc(1, operator.mul, 2, 3, 4))  # 24

内置高阶函数实践

map():映射转换

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

filter():条件筛选

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

sorted():定制排序逻辑

words = ['apple', 'zoo', 'in', 'waxberry', 'pear']
sorted_words = sorted(words, key=len)
print(sorted_words)  # ['in', 'zoo', 'pear', 'apple', 'waxberry']

最佳实践sorted 返回新列表(无副作用),优于 list.sort() 修改原列表。


Lambda函数:简洁的“一次性”函数

✅ 定义方式

lambda 参数: 表达式

✅ 示例对比

传统写法:

def square(x): return x ** 2
print(square(5))  # 25

lambda 写法:

print((lambda x: x ** 2)(5))  # 25

✅ 配合高阶函数使用

nums = [1, 2, 3, 4]
result = list(map(lambda x: x**2, filter(lambda x: x % 2 == 0, nums)))
print(result)  # [4, 16]

✅ 更复杂的例子

import functools, operator


# 一行代码实现阶乘
fac = lambda n: functools.reduce(operator.mul, range(2, n+1), 1)


# 一行代码判断质数
is_prime = lambda x: all(map(lambda d: x % d, range(2, int(x ** 0.5) + 1)))


print(fac(5))       # 120
print(is_prime(29)) # True

偏函数:锁定部分参数生成新函数

✅ 应用场景

你经常调用一个函数,总是传递同一部分参数,比如:

int('1001', base=2)

可以“偏函数化”处理,生成更简洁的接口。

✅ 实现方法

import functools


int2 = functools.partial(int, base=2)
print(int2('1001'))  # 输出 9(二进制转十进制)

partial(函数, 固定参数=值) 返回一个新函数,固定部分参数。


高阶函数 vs 普通函数:比较分析

特性/能力 普通函数 高阶函数
是否可接受函数参数
是否可返回函数
灵活性 低,功能固定 高,可通过传参改变行为
是否支持组合函数逻辑 是(如:map(filter(...))
推荐使用场景 简单、固定逻辑函数 复杂、灵活、多变的逻辑场景

实战:组合使用 map + filter + lambda

data = [15, 28, 33, 60, 72, 99]


# 过滤出能被3整除的数,平方处理
result = list(map(lambda x: x**2, filter(lambda x: x % 3 == 0, data)))
print(result)  # [225, 900, 5184, 9801]

✅ 推荐写法:如果逻辑简单,优先使用列表推导式:

result = [x**2 for x in data if x % 3 == 0]

总结

✅ 一等函数的三种核心用法:

用法类型 示例
函数赋值 f = addf(1, 2) 等价于 add(1, 2)
函数作为参数 calc(0, operator.add, 1, 2, 3)
函数作为返回值 def outer(): return inner

✅ 函数进阶工具一览:

技术 作用
高阶函数 将函数作为参数或返回值,提高函数灵活性
lambda函数 快速定义一次性函数,适合简单逻辑
偏函数 固定部分参数生成简洁函数接口
map/filter/reduce 数据批处理常用三件套,效率与可读性兼具

教学建议与使用原则

  1. 掌握高阶函数思想,但避免过度嵌套函数导致可读性下降
  2. lambda 应用于简单、局部、无需复用的函数逻辑
  3. partial 可作为创建预配置函数的利器,常用于数据清洗与接口定制。
  4. 优先使用标准库的函数(如 operator、functools、itertools)而不是重复造轮子。

结语:掌握函数的“高级用法”,迈入 Python 编程的新阶段!

高阶函数不是炫技,而是设计灵活、可组合、可复用代码的自然结果。掌握它,你将:

  • 编写更短、更清晰、更可拓展的逻辑;
  • 理解 Python 标准库背后的“函数式思维”;
  • 为将来掌握函数式编程(如 mapreduce、装饰器、闭包)打下坚实基础。

函数不仅是流程的载体,更是抽象的艺术。会用函数,是入门;善用函数,是进阶!