map函数根据提供的函数对指定的序列(可迭代的)做映射
定义:map(function, sequence[,sequence,…])—>list
返回一个map类型的可迭代对象
def create_content(mes): return map(lambda x: x+2, mes) def write_content_item(result): for i in result: print(i, end=" ") content = create_content([1, 2, 3]) # 返回一个map对象 print(type(content)) # map对象具有__iter__和__next__方法,属于可迭代对象 print(content.__next__()) write_content_item(content) content = create_content((1, 2, 3)) write_content_item(content) ''' map第二个参数开始必须输入的是可迭代对象 ''' try: content = create_content(1) write_content_item(content) except Exception as e: print("输入了非迭代对象") print("第二次实验------多输入参数") content = map(lambda x, y: x + y, {1, 2}, {3, 4}) for i in content: print(i) content = map(lambda x, y, z: x + y - z, {1, 2}, {3, 4}, {-1, 3}) for i in content: print(i)由上可知:
输入的sequence[,sequence,…]必须是可迭代对象前面的function调用的参数数量需要与后面输入的迭代对象数目保持一致filter函数对指定的序列进行过滤操作
定义:filter(function or None, sequence) -> list, tuple, or string
print(list(filter(lambda x: 'a' <= x <= 'z', '132a')))reduce函数会对参数序列中元素进行累积 (上次调用的结构会传递给下一次调用)
定义:reduce(function, sequence[, initial]) -> value
注:function必须是有2个参数的函数
from functools import reduce def get_all(content): return reduce(lambda x, y: 10*x + y, content) print(get_all([1, 2, 3, 4, 5]))reduce(functiion(x,y),[p1, p2, p3, p4])<=>f(f(f(p1,p2),p3),p4)
在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便
# lambda构建匿名函数 f = lambda x, y: x + y print(f(1, 2))用匿名函数有个好处:
因为函数没有名字,不必担心函数名冲。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数: >>> f = lambda x: x * x >>> f <function <lambda> at 0x101c6ef28> >>> f(5) 25 同样,也可以把匿名函数作为返回值返回 def build(x, y): return lambda: x * x + y * y样例输入 123asdasdfgw123 样例输出 123123
from functools import reduce # 1、输入一个字符串 mes = input("请输入你要转化为整数的字符串>>") # 2、筛选出其中的数字字符 str_number = filter(lambda x: '0' <= x <= '9', mes) # 3、将数字字符串转化为数字迭代器 number_iterator = map(lambda x: int(x), list(str_number)) # 4、将数字迭代器转化为一个整数 number = reduce(lambda x, y: 10*x + y, list(number_iterator)) print(number)