Python函数式编程:lambda、map和filter的使用
Python是一种多范式编程语言,它支持面向对象、函数式和过程式编程。函数式编程是一种编程范式,它的核心思想是将计算过程视为函数之间的相互转换和组合,强调没有“副作用”,即一个函数的输出结果仅取决于它的输入参数,而不是外部状态的改变。Python中的函数式编程有三个核心工具--lambda、map和filter。
1. lambda
lambda是匿名函数,它可以像普通函数一样使用。lambda函数可以有任意数量的参数,但只能有一个表达式。这个表达式执行完毕后,它的结果就是这个lambda函数的返回值。而且lambda函数与普通函数一样,也可以作为输入参数传递给其他函数使用。一般来说,当一个函数只用一次时,使用lambda函数会方便些。
使用lambda函数的语法如下:
lambda arguments: expression
例如,定义一个函数计算两个数的和:
def add(x, y):
return x+y
等价于使用lambda函数:
add = lambda x,y: x+y
2. map
map函数是Python内置的高阶函数,它的作用是对可迭代对象中的每个元素都应用一个函数,并输出一个新的可迭代对象。map函数的语法如下:
map(function, iterable, ...)
其中function是应用于每个元素的函数,iterable是一个或多个可迭代对象,比如列表、元组或字符串。当map函数只有一个可迭代对象作为参数时,返回的结果也是一个可迭代对象。
例如,将一个列表中的每个元素平方:
def square(x):
return x**2
lst = [1,2,3,4,5]
squared = map(square, lst)
print(list(squared)) #[1, 4, 9, 16, 25]
使用lambda函数在一行代码中实现:
lst = [1,2,3,4,5]
squared = map(lambda x: x**2, lst)
print(list(squared)) #[1, 4, 9, 16, 25]
3. filter
filter函数是Python内置的高阶函数,它通过过滤删除了可迭代对象中不符合特定条件的元素,并返回一个新的可迭代对象。filter函数的语法如下:
filter(function, iterable)
其中function是应用于每个元素的函数,iterable是一个可迭代对象。如果把function设置为None,filter函数就会默认过滤掉iterable中所有false值。
例如,筛选列表中的偶数:
def is_even(x):
return x%2 == 0
lst = [1,2,3,4,5]
even = filter(is_even, lst)
print(list(even)) #[2, 4]
使用lambda函数在一行代码中实现:
lst = [1,2,3,4,5]
even = filter(lambda x: x%2 == 0, lst)
print(list(even)) #[2, 4]
在函数式编程中,lambda、map和filter是必不可少的工具。它们可以让我们以更高效的方式处理数据,简化代码并增强可读性。不过,要注意在使用lambda函数时,不要过度使用它,因为它会导致代码可读性下降。
