python_迭代器相关

1.迭代器
能被next调用,并不断返回下一个值的对象
2.概念
迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而继续,单出的重复不是迭代
3.特征
不依赖索引,通过next指针迭代所有数据,一次只取一个,可以大大节省空间,理论上可以迭代无限量的数据
4.迭代器与可迭代对象的对比
	1.可迭代对象
	2.迭代器
		1.for 循环遍历数据的底层实现就是利用了迭代器,通过next方法进行调用,从而获取数据
5.迭代器与可迭代对象的关系
从不可被直接获取 => 可被直接获取 的过程
6.怎么判定对象是迭代器还是可迭代对象?
dir()函数可以查看一个对象中的所有成员 -->  res = dir()	print(res)	如果成员中有'__iter__'方法,就是可迭代对象
7.如何定义一个迭代器?
	1.iter(可迭代对象)	面向过程使用
	2.__iter__			面向对象使用
8.如何判断一个迭代器?
如果内置成员中,含有__iter__和__next__方法,就可以判断是一个迭代器
使用ctrl + f, 进行查找

res = "__iter__" in dir(it) and "__next__" in dir(it)
print(res)

9.如何调用一个迭代器?
	1.next(迭代器)
	2.迭代器.__next__()
	迭代器通过next方法调用时,是单向不可逆的过程
	没有数据调用时,会报错吗?		# StopInteration
10.如何重置一个迭代器?

it = iter(setvar)
res = next(it)		# 调用
print(res)

11.使用Iterator(迭代器类型) 和 Iterable(可迭代对象) 来判断是否是迭代器

from collections import Iterator, Iterable
# 判断setvar的迭代属性
setvar = {"a","b"}
res = isinstance(setvar,Iterator)
res1 = isinstance(setvar,Iterable)
print(res)

如果是可迭代对象,就一定是迭代器吗? 不对;
如果是一个迭代器,就一定是可迭代对象吗? 对
可迭代对象 > 迭代器

# 判断range的迭代属性
it = iter(range(10))
res = isinstance(it,Iterator)
res1 = isinstance(it,Iterable)
print(res)

12.如何快速调用1000000次迭代获取数据
	1.for循环
	it = iter(range(10))
	for i in it:
		print(i)
	
	2.for循环 + next配合
	it = iter(range(10000000))
	for i in range(10):
		res = next(it)
		print(res)		# 1-9
	
	for i in range(10):
		res = next(it)
		print(res)		# 10-18

1.高阶函数
能够把函数当成参数传递的就是高阶函数
2.map(func,iterable)
功能:
	把Iterable里面的数据一个一个拿出来,放到func函数中进行处理,把处理结果扔到迭代器中,返回迭代器
参数:
	func 自定义函数 or 内置函数
	Iterable 可迭代对象(容器类型数据、range、迭代器)
返回值:
	迭代器

例1from collections import Iterator,Iterable
	it = map(int,lst)
	res = isinstance(it,Iterator)
	print(res)2[1,2,3,4] => [1,4,9,16]
	def func(n):
		return n ** 2
	it = map(func,lst)
	print(list(it))
改:
	it = map(lambda n:n**2, lst)
	print(list(it))

3.dic = {97:"a",98:"b",99:"c"},{"a","b","c"},返回{97,98,99}







# map改写
lst = ["a","b","c"]
dic = {97:"a",98:"b",99:"c"}

def func(n):
	dic_new = {}
	for k,v in dic.items():
		dic_new[v] = k
	return dic_new[n]

it = map(func,lst)
print(list(it))

# 改
def func(n):
	for k,v in dic.items():
		if n == v:
			return k
it = map(func,lst)
print(list(it))
1.filter(func,iterable)
功能:
	在自定义的函数中,过滤数据
	如果返回True,代表保留数据,False代表舍弃该数据
参数:
	func 自定义函数
	iterable 可迭代性数据
返回值:
	迭代器

例1[1,2,3,4,5,6,7,8] => 要所有奇数
from collections import Iterator,Iterable

def func(n):
	if n % 2 == 0:
		return False
	else:
		return True
it = filter(func,lst)
res = isinstance(it,Iterator)
print(res)
print(it)

it = filter(lambda n :True if n % 2 == 0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值