Day13 高级函数 迭代器

高阶函数,也就是系统内置的一些函数,具有某种功能
能把函数当做参数传递

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终止循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值