Python函数编程:十个常用的高阶函数
Python是一门十分强大的编程语言,Python中的函数编程是Python语言中的一个重要部分,也是其中的一种编程范式。Python的函数编程基于数学中的一些概念和思想,其中最主要的概念是“函数是一等公民”。Python中的函数可以作为参数传递给其他函数,还可以作为返回值返回给调用者,这种特性非常有用。下面介绍十个常用的Python高阶函数。
1. map
map是Python内置的一个高阶函数,它接受两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并返回一个可迭代对象,可以使用list()函数将其转换为列表。
例如,将一个列表中的元素全部转为字符串:
lst = [1, 2, 3, 4, 5] lst_str = map(str, lst) print(list(lst_str)) # ['1', '2', '3', '4', '5']
2. filter
filter也是Python内置的一个高阶函数,它接受两个参数,一个是函数,一个是序列,filter将传入的函数依次作用到序列的每个元素,将函数返回值为真的元素组成一个新的序列并返回,这个序列也是可迭代对象,可以使用list()函数将其转换为列表。
例如,将一个列表中的偶数元素筛选出来:
lst = [1, 2, 3, 4, 5] lst_even = filter(lambda x: x % 2 == 0, lst) print(list(lst_even)) # [2, 4]
3. reduce
reduce也是Python内置的一个高阶函数,它接受两个参数,一个是函数,一个是序列,reduce将传入的函数依次作用到序列的每个元素,并且每次作用的结果将作为下一次的参数传入,最终返回一个值。
例如,计算一个列表中所有元素的累加和:
from functools import reduce lst = [1, 2, 3, 4, 5] sum = reduce(lambda x, y: x + y, lst) print(sum) # 15
4. zip
zip可以将多个序列按照相同的索引位置组合成一个新的元素,每个新的元素由原序列中相同索引位置的元素组成。
例如,将两个列表组合成一个新的列表:
lst1 = [1, 2, 3, 4] lst2 = ['a', 'b', 'c', 'd'] lst_zip = zip(lst1, lst2) print(list(lst_zip)) # [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
如果原序列的长度不同,那么zip将以最短的序列长度为准组合,超出部分将被忽略。
5. sorted
sorted是Python内置的一个高阶函数,它可以对一个序列进行排序并返回排序后的列表。
例如,对一个列表进行排序:
lst = [3, 1, 4, 2, 5] lst_sorted = sorted(lst) print(lst_sorted) # [1, 2, 3, 4, 5]
6. any和all
any和all是Python内置的两个高阶函数,它们都接受一个可迭代对象作为参数,并返回一个bool值。
any函数将可迭代对象中所有元素传递给bool()函数,如果其中任意一个元素的bool()函数返回True,则any函数返回True,否则返回False。
例如,判断一个列表中是否存在偶数:
lst = [1, 3, 5, 2, 7] has_even = any(x % 2 == 0 for x in lst) print(has_even) # True
all函数将可迭代对象中所有元素传递给bool()函数,如果其中任意一个元素的bool()函数返回False,则all函数返回False,否则返回True。
例如,判断一个列表中的元素是否都大于0:
lst = [1, 3, 5, 2, 7] all_gt_0 = all(x > 0 for x in lst) print(all_gt_0) # True
7. max和min
max和min是Python内置的两个高阶函数,它们分别接受一个可迭代对象作为参数,并返回可迭代对象中最大值和最小值。
例如,获取一个列表中的最大值和最小值:
lst = [1, 3, 5, 2, 7] max_val = max(lst) min_val = min(lst) print(max_val) # 7 print(min_val) # 1
8. enumerate
enumerate是Python内置的一个高阶函数,它可以将一个可迭代对象转换为一个带有索引的可迭代对象,每个元素都是原序列中的元素和它的对应索引。
例如,给一个列表中的每个元素加上索引:
lst = ['apple', 'banana', 'orange']
for idx, val in enumerate(lst):
print(idx, val)
# 0 apple
# 1 banana
# 2 orange
9. any和all
any和all是Python内置的两个高阶函数,它们都接受一个可迭代对象作为参数,并返回一个bool值。
any函数将可迭代对象中所有元素传递给bool()函数,如果其中任意一个元素的bool()函数返回True,则any函数返回True,否则返回False。
例如,判断一个列表中是否存在偶数:
lst = [1, 3, 5, 2, 7] has_even = any(x % 2 == 0 for x in lst) print(has_even) # True
all函数将可迭代对象中所有元素传递给bool()函数,如果其中任意一个元素的bool()函数返回False,则all函数返回False,否则返回True。
例如,判断一个列表中的元素是否都大于0:
lst = [1, 3, 5, 2, 7] all_gt_0 = all(x > 0 for x in lst) print(all_gt_0) # True
10. sorted
sorted是Python内置的一个高阶函数,它可以对一个序列进行排序并返回排序后的列表。
例如,对一个列表进行排序:
lst = [3, 1, 4, 2, 5] lst_sorted = sorted(lst) print(lst_sorted) # [1, 2, 3, 4, 5]
总结:
Python中的函数编程功能非常强大,有了高阶函数,可以使代码更加简洁、易读、易于维护。上面介绍了十个常用的高阶函数,包括map、filter、reduce、zip、sorted、any、all、max、min和enumerate,这些高阶函数可以满足很多实际开发的需求。我们在编写Python代码时,应该充分利用这些高阶函数,以提高编码效率和代码质量。
