高阶函数介绍 普通函数中的参数是一种数据类型,比如列表,字符串,整型 高阶函数的实参是一个函数名,函数的返回值是一个函数。 例如在python中有一个函数是 abs 用来求整型的绝对值: 我们可以用代码表示: f = abs() #函数可以复制成一个变量。 print(f(-10)) 一个简单的高阶函数: def fun(x,y,f): return f(x),f(y) print(fun(-10,34,abs)) # f = abs 执行结果: 几个内置高阶函数 map map()函数接收两个参数,一个是函数,一个是序列 。 map将传入的函 在Python编程语言中,高阶函数是一类特殊的函数,它们以其他函数作为参数,并且能够返回一个新的函数。这种函数能够增强代码的可读性和复用性,是函数式编程的重要特性之一。 我们来详细解释一下高阶函数的定义。在普通函数中,参数通常是我们常见的数据类型,如整型、浮点型、字符串或列表等。但在高阶函数中,实参可以是一个函数名,也就是说,你可以传递一个函数给另一个函数作为参数。例如,`abs()` 是 Python 的内置函数,用于计算整数的绝对值。我们可以将其赋值给一个变量 `f`,然后通过 `f(-10)` 调用它。这是一个简单的高阶函数示例: ```python def fun(x, y, f): return f(x), f(y) f = abs() print(fun(-10, 34, abs)) # 打印 (-10, 34) ``` 在上述代码中,`fun` 函数接受两个数值参数 `x` 和 `y`,以及一个函数 `f` 作为参数。它将 `f` 应用于 `x` 和 `y`,并返回结果。 接下来,我们讨论几个内置的高阶函数: 1. **map()**:`map()` 函数接收一个函数和一个序列(如列表)作为参数,将函数依次应用于序列的每个元素,然后返回一个新的迭代器,包含所有应用函数后的结果。若要转换为列表,可以使用 `list()`。例如,计算列表中每个数的阶乘: ```python def factorial(n): res = 1 for i in range(1, n + 1): res *= i return res numbers = [random.randint(2, 7) for _ in range(10)] print(list(map(factorial, numbers))) ``` 2. **reduce()**:`reduce()` 函数对序列进行累积计算,将序列中的元素两两组合,用提供的函数进行计算,最后得到单个值。在 Python 2 中,`reduce()` 是内置函数,而在 Python 3 中,需要从 `functools` 模块导入。例如,计算序列的累乘: ```python from functools import reduce def multiply(x, y): return x * y print(reduce(multiply, range(1, 4))) # 输出:6 ``` 3. **filter()**:`filter()` 函数也接收一个函数和一个序列,但与 `map()` 不同的是,它会根据函数返回的布尔值来决定是否保留序列中的元素。例如,筛选出1到100之间的奇数: ```python def is_odd(num): return num % 2 != 0 print(list(filter(is_odd, range(101)))) ``` 4. **sorted()**:`sorted()` 函数可以对序列进行排序,可以指定排序规则。默认是升序排序,可以通过 `reverse=True` 设置降序。例如,对一个列表进行降序排序: ```python numbers = [2, 3, 4, 1] print(sorted(numbers, reverse=True)) # 输出:[4, 3, 2, 1] ``` 在实际问题中,`sorted()` 可以配合 `key` 参数使用自定义函数进行复杂排序。例如,按照商品数量和价格进行排序: ```python products = [('apple1', 200, 32), ('apple2', 40, 12), ('apple3', 40, 2), ('apple4', 1000, 23), ('apple5', 40, 5)] # 按照数量排序 print(sorted(products, key=lambda x: x[1])) # 按照价格排序 print(sorted(products, key=lambda x: x[2])) # 先按数量排序,再按价格排序 print(sorted(products, key=lambda x: (x[1], x[2]))) ``` 给出一个练习题:将数组中的所有0移动到末尾,非0元素保持不变。这里我们可以利用 `sorted()` 函数结合 `key` 参数实现: ```python n = int(input()) numbers = [int(i) for i in input().split()] print(' '.join(map(str, sorted(numbers, key=lambda x: (x != 0, x))))) ``` 这个练习题利用了元组的排序规则,元组中的第一个元素相同时,才会比较第二个元素。通过 `(x != 0, x)`,使得非零元素排在前面,0元素排在后面。
- 粉丝: 2
- 资源: 931
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 10、安徽省大学生学科和技能竞赛A、B类项目列表(2019年版).xlsx
- 9、教育主管部门公布学科竞赛(2015版)-方喻飞
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c
- C语言-leetcode题解之73-set-matrix-zeroes.c
- 树莓派物联网智能家居基础教程
- YOLOv5深度学习目标检测基础教程
评论0