📜  Python中的函数式编程(1)

📅  最后修改于: 2023-12-03 14:46:39.616000             🧑  作者: Mango

Python中的函数式编程

函数式编程是一种编程范式,与面向对象编程、过程式编程相对。它将计算视为数学函数的求值,强调函数的纯度、不可变数据以及避免副作用等理念。Python中也提供了丰富的函数式编程特性,本文将为你介绍其中的一些。

Lambda函数

Lambda函数是一种匿名函数,它可以用于一些简单的函数定义。Lambda函数可以在一行代码中定义,非常方便,但因为它不能包含函数文档字符串,所以只适合定义简单的函数。

# 定义一个简单的阶乘函数
factorial = lambda n: 1 if n == 0 else n * factorial(n-1)

print(factorial(5)) # 打印120
Map函数

Map函数是一种高阶函数,它接受两个或多个参数。第一个参数是一个函数,第二个参数是一个可迭代对象,例如列表或元组。它将第一个参数函数应用于第二个参数的每个元素,并返回一个新的迭代器,其中包含所有应用了函数的元素。

# 定义一个简单的平方函数
square = lambda x: x ** 2

# 使用map函数将函数应用于列表中的每个元素
original_list = [1, 2, 3, 4, 5]
mapped_list = list(map(square, original_list))

print(mapped_list) # 打印[1, 4, 9, 16, 25]
Filter函数

Filter函数也是一种高阶函数,它接受两个参数。第一个参数是一个函数,第二个参数是一个可迭代对象。它将第一个参数函数应用于第二个参数中的每个元素,并只返回使函数计算结果为True的元素。

# 定义一个简单的判断是否为偶数的函数
is_even = lambda x: x % 2 == 0

# 使用filter函数将函数应用于列表中的每个元素
original_list = [1, 2, 3, 4, 5]
filtered_list = list(filter(is_even, original_list))

print(filtered_list) # 打印[2, 4]
Reduce函数

Reduce函数也是一种高阶函数,它在Python3中被移至functools模块中。它接受两个参数。第一个参数是一个函数,这个函数必须接受两个参数并返回一个值。第二个参数是一个可迭代对象。它将第一个参数函数应用于第二个参数的每个元素并返回一个累加值。

# 导入functools模块
import functools

# 定义一个简单的加法函数
addition = lambda x, y: x + y

# 使用reduce函数将函数应用于列表中的每个元素
original_list = [1, 2, 3, 4, 5]
res = functools.reduce(addition, original_list)

print(res) # 打印15
Generator(生成器)

生成器是一种特殊的迭代器,它可以用yield语句生成一个迭代器对象。生成器只有在被访问时才会生成值,它们通常比列表等容器节省内存。

# 定义一个简单的生成器
def infinite_sequence():
    num = 0
    while True:
        yield num
        num += 1

# 访问生成器
gen = infinite_sequence()
print(next(gen)) # 打印0
print(next(gen)) # 打印1
print(next(gen)) # 打印2
总结

本文介绍了Python中的函数式编程特性,包括Lambda函数、Map函数、Filter函数、Reduce函数和Generator生成器。这些特性可以让你更快地编写Python代码,同时提高代码的可读性和可重用性。