欢迎访问宙启技术站
智能推送

Python函数编程:十个常用的高阶函数

发布时间:2023-06-02 13:53:50

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代码时,应该充分利用这些高阶函数,以提高编码效率和代码质量。