map函数
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函数对指定的序列进行过滤操作
定义:filter(function or None, sequence) -> list, tuple, or string
print(list(filter(lambda x: 'a' <= x <= 'z', '132a')))
reduce函数
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函数
在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便
# 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)