高阶函数 定义 内置的有哪些

例题引导:用reduce()函数和lambda表达式,求:1+2+…100

本题要点:

  • ​ 函数格式:reduce(func,iter1)
  • ​ 参数介绍:
    • ​ func:函数,有且只有两个参数
    • ​ iter1:可迭代对象
  • ​ 功能:将可迭代对象中的元素依次取出,并作用func函数,把作用的结果作为下一次参数继续运算。

参考答案:

1
2
from functools import reduce
print(reduce(lambda x,y: x+y,range(1,101)))

学习引导:

  • 高阶函数定义
  • 内置高阶函数介绍

高阶函数

什么是高阶函数?

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。比如:

1
2
3
4
5
def add(x,y,f):
return f(x) + f(y)

op = add(1,1,abs) #这里把python内置函数abs作为参数传递给add
print (op)
1
#2

内置函数:一般都是因为使用频率比较频繁或是是元操作,所以通过内置函数的形式提供出来,通过对python的内置函数分类分析可以看出来:基本的数据操 作基本都是一些数学运算(当然除了加减乘除)、逻辑操作、集合操作、基本IO操作,然后就是对于语言自身的反射操作,还有就是字符串操作,也是比较常用 的,尤其需要注意的是反射操作。

比如常用的常用的abs、round等

内置高阶函数

filter函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

  • 语法:filter(function, iterable)
  • 参数:function—- 判断函数,iterable – 可迭代对象
  • 返回值:返回列表

实例如下

1
2
3
4
def is_odd(n):
return n % 2 == 1
alist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(list(alist))
1
#[1, 3, 5, 7, 9]
map函数

接收一个函数 f 和一个或多个序列list,并通过把函数 f 依次作用在 序列list 的每个元素上,得到一个新的 list 并返回。

  • 语法:map(function, iterable, …)

  • 参数:function – 函数,iterable – 一个或多个序列

  • 返回值:Python 2.x 返回列表/Python 3.x 返回迭代器

实例如下

1
2
3
4
5
list_=[1,2,3,4,5]
def square(x) : # 计算平方数
return x ** 2
list_2=list(map(square,list_)) # 计算列表各个元素的平方
print(list_2)
1
#[1, 4, 9, 16, 25]

使用 lambda 匿名函数

1
2
list_3=list(map(lambda x: x ** 2, list_)) # 使用 lambda 匿名函数
print(list_3)
1
[1, 4, 9, 16, 25]

实例2

1
2
3
# 提供了两个列表,对相同位置的列表数据进行相加
list_4=list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
print(list_4)
1
#[3, 7, 11, 15, 19]
reduce函数

reduce()函数接收的参数和 map()类似,但是行为不同。reduce() 函数会对参数序列中元素进行累积。reduce()传入的函数 f 必须接收两个参数,用传给 reduce 中的函数 f(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 f 函数运算,最后得到一个结果。

  • 语法:reduce(function, iterable[, initializer])

  • 参数:function – 函数,有两个参数。iterable – 可迭代对象。initializer – 可选,初始参数

实例如下

1
2
3
4
5
from functools import reduce   #自 Python3 之后,这个函数从全局命名空间中移除,放在了 functools模块,因为如果想正确执行,必须这样

def add(x,y): #两数想家
return x+y
reduce(add, [1,2,3,4,5])
1
#15
1
>>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
1
#15
1
2
3
def f(a,b):
return a+b
print(reduce(f,list_,10)) #这里的第三个参数是做为初始值的
1
#25

小作业:

  1. 请尝试用filter()删除1~100的素数,输出剩余的整数。

  2. 利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。

    例如.输入:[‘xandra’, ‘William’, ‘ELIZABETH’],输出:[‘Xandra’, ‘William’, ‘Elizabeth’]

评论