例题引导:用reduce()函数和lambda表达式,求:1+2+…100
本题要点:
函数格式:reduce(func,iter1)
参数介绍:
func:函数,有且只有两个参数
iter1:可迭代对象
功能:将可迭代对象中的元素依次取出,并作用func函数,把作用的结果作为下一次参数继续运算。
参考答案:
from functools import reduce
print(reduce(lambda x,y: x+y,range(1,101)))
学习引导:
高阶函数定义
内置高阶函数介绍
高阶函数
什么是高阶函数?
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。比如:
def add(x,y,f):
return f(x) + f(y)
op = add(1,1,abs) #这里把python内置函数abs作为参数传递给add
print (op)
#2
内置函数:一般都是因为使用频率比较频繁或是是元操作,所以通过内置函数的形式提供出来,通过对python的内置函数分类分析可以看出来:基本的数据操 作基本都是一些数学运算(当然除了加减乘除)、逻辑操作、集合操作、基本IO操作,然后就是对于语言自身的反射操作,还有就是字符串操作,也是比较常用 的,尤其需要注意的是反射操作。
比如常用的常用的abs、round等
内置高阶函数
filter函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
语法:filter(function, iterable)
参数:function---- 判断函数,iterable -- 可迭代对象
返回值:返回列表
实例如下
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, 3, 5, 7, 9]
map函数
接收一个函数 f 和一个或多个序列list,并通过把函数 f 依次作用在 序列list 的每个元素上,得到一个新的 list 并返回。
语法:map(function, iterable, ...)
参数:function -- 函数,iterable -- 一个或多个序列
返回值:Python 2.x 返回列表/Python 3.x 返回迭代器
实例如下
list_=[1,2,3,4,5]
def square(x) : # 计算平方数
return x ** 2
list_2=list(map(square,list_)) # 计算列表各个元素的平方
print(list_2)
#[1, 4, 9, 16, 25]
使用 lambda 匿名函数
list_3=list(map(lambda x: x ** 2, list_)) # 使用 lambda 匿名函数
print(list_3)
[1, 4, 9, 16, 25]
实例2
# 提供了两个列表,对相同位置的列表数据进行相加
list_4=list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
print(list_4)
#[3, 7, 11, 15, 19]
reduce函数
reduce()函数接收的参数和 map()类似,但是行为不同。reduce() 函数会对参数序列中元素进行累积。reduce()传入的函数 f 必须接收两个参数,用传给 reduce 中的函数 f(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 f 函数运算,最后得到一个结果。
语法:reduce(function, iterable[, initializer])
参数:function -- 函数,有两个参数。iterable -- 可迭代对象。initializer -- 可选,初始参数
实例如下
from functools import reduce #自 Python3 之后,这个函数从全局命名空间中移除,放在了 functools模块,因为如果想正确执行,必须这样
def add(x,y): #两数想家
return x+y
reduce(add, [1,2,3,4,5])
#15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
#15
def f(a,b):
return a+b
print(reduce(f,list_,10)) #这里的第三个参数是做为初始值的
#25
小作业:
1.请尝试用filter()删除1~100的素数,输出剩余的整数。
2.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
例如.输入:['xandra', 'William', 'ELIZABETH'],输出:['Xandra', 'William', 'Elizabeth']
好文章,我 在看❤