高阶函数,也就是系统内置的一些函数,具有某种功能
能把函数当做参数传递
map函数
# map
map(func,Iterable) (函数,可迭代数据)
参数:
func(自定义函数,或内置函数)
功能:
把Iterable中的数据一个个拿出来,扔到func中做处理
返回值:最后返回一个迭代器(Iterator)
# 例子1
# 定义一个函数,实现把传入的字符变成整型
def func(*args):
for i in args:
return int(i)
lst = ['1', '2', '3', '4']
res = map(func,lst) # 生成一个迭代器
print(next(res)) # next 调用迭代器
# 注释: 迭代器的调用方法:
# 1.使用next方法
# 2.for循环遍历出来
# 3.list强转
# 例子2
# 把 [1,2,3,4] =转换为> [2,8,24,64]
# 使用map方法
lst = [1,2,3,4]
res = map(lambda n:n << n ,lst)
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
reduce函数
from functools import reduce 先从库中导入 艹
reduce(func,Iterable)
功能:计算数据
把Iter中的前两个值拿出来放到func中做运算,运算的结果在和Iter的第三个值做运算,依次类推
返回值: 计算后的结果
# 例子 将[5,4,8,8] 变为 5488
# 常规方法
strvar = ''
for i in lst:
strvar += str (i)
print(int(strvar))
# 使用reduce
from functools import reduce
lst = [5,4,8,8]
def func(x,y):
return x*10 + y
res = reduce(func,lst)
print(res)
# 使用reduce + lambda 改造
res = reduce(lambda x,y:x*10+y,lst)
print(res)
sorted函数
sorted(Iterable,key= 函数.reverse= True)
功能: 排序
参数:
iterable:(容器类型数据,range对象,迭代器)
key : 指定自定义函数 或 内置函数
reverse: 代表升序或者降序,默认是升序(从小到大排序)
返回值:
排序后的结果,列表
注: 可以排序一切容器类型,返回的是新列表(sort是仅针对于列表,也是基于原列表进行排序)
# 1.默认从小到大进行排序
lst = [1,2,3,4,5,-90,-4,-1,100]
res = sorted(lst)
print(res)
# 2.指定函数进行排序 (按照绝对值进排序 abs)
lst = [-10,-2,3,5]
res = sorted(lst,key=abs)
# 3.使用自定义函数进行排序 (按余数进行排序)
lst = [19,21,38,43,55]
def func(n):
return n % 10
lst = sorted(lst,key=func)
print(lst)
filter() 过滤器
filter(func,iterable)
功能: 过滤数据 ()
return True 当前这个数据保存
return Flash 当前这个数据舍弃
参数:
func: 自定义函数
iterable: 可迭代数据(容器类型数据,range对象,迭代器)
返回值:
迭代器
# 例
# 过滤偶数
lst = [1,2,3,4,5,6,7,8,9,10]
def func(n):
return n %2==0
res = filter(func,lst)
print(list(res))
迭代器 Iterator
迭代器(iterator): 迭代取值的工具 , 是一个重复的过程,每一次重复都是基于上一次的结果而继续的,单纯的重复不是迭代
例:
count = 0
while count <5:
print(count)
count += 1
以上就是一个简单的迭代
迭代器取值,并不依赖于索引,也是为了解决像集合,字典,文件不能通过索引取值而来的一种功能(迭代器),通过next指针迭代所有数据,一次只取一个值,大大节省空间.
# 可迭代对象: 但凡内有__iter__方法的都是可迭代对象(dir查看)
创建一个迭代器,然后通过next调用
a = {'a':1,'b':2,'c':3}
i = a.__iter__()
print(i.__next__())
print(i.__next__())
print(i.__next__())
print(i.__next__()) # Stopitercation
# 扩展:
找不到会终止,不会报错
try:
code 1
except StopItercation:
break
#
a = [1,2,3,4]
i = a.__iter__()
while True:
try:
print(i.__next__()) # 循环不终止,报错 StopIteration
except StopIteration:
break
<在一个迭代器值取干净后,再对其取值取不到>
for 循环 底层就是运用的迭代器,而且更加简洁,高效
for循环的工作原理:
d = {'a':1,'b':2,'c':3}
for i in d:
# 1. d.__iter__()得到一个迭代器对象
# 2. 迭代器对象.__next__()拿到一个返回值,然后将该返回值赋值给i
# 3. 循环往复步骤2,直到抛出StopIteration异常for循环会捕捉异常然后break终止循环