函数进阶_迭代器

#迭代器

l = [1,2,3]
#索引
# 循环 for
# for i in l:
# i
# print(i)

# 可迭代的
#list
#dic
#str
#tuple
#f = open()
#set
#range()
#enumorate

#迭代器 --------for循环原理
# dir方法

# print(dir([])) #告诉我列表拥有的方法
# 双下方法---->__add__
# print([1].__add__([2]))
# print([1]+[2])

# print((1).__add__(2)) #1+2---->(1).__add__(2)

# print(dir(str))

# ret = set(dir([]))&set(dir({}))&set(dir(str))&set(dir(tuple))&set(dir(range(10)))
#只要是for循环的数据类型,就一定拥有__iter__方法
# print([].__iter__())
# print(ret)
# print(dir([].__iter__()))
# ret = set(dir([].__iter__()))-set(dir([]))
# print(ret)

# l = [1,2,3,4]
#
# iteror = l.__iter__()
#
# print(iteror.__next__())
# print(iteror.__next__())
# print(iteror.__next__())
# print(iteror.__next__())
# print(iteror.__next__())
# iterable 可迭代的, ---> __iter__#只要含有__iter__是可迭代的
#[].__iter__() 迭代器--->__next__ #只要含有__next__就可以一个一个的取值

#要含有__iter__方法都是可以可迭代的------>可迭代协议
#迭代器协议,必须含有以上两个方法,才叫迭代器协议

# l = [1,2,3,4]
#
# for i in l.__iter__():
# print(i)

# 迭代器协议和可迭代协议
# 可迭代协议和迭代器协议
# 可以被for循环都是可以迭代的
# 可迭代的内部都有__iter__方法
#只要是迭代器,一定可迭代,可迭代不一定是迭代器

# for 循环其实就是在使用迭代器
# iterator
#可迭代对象
# 直接给你内存地址

# print([].__iter__())
# # print(range(0,10))
# # print()

# for
# 只有是可迭代对象的时候,才能用for循环
# 当我们遇到一个新的变量,不确定能不能for循环的时候,就判断是否可迭代

# for i in l:
# pass
# iterator ----> 1.__iter__()
# iterator.__next__()
# 迭代器的好处:
# 从容器中可以一个一个的取出,会把所有的值都取到
# 他可以节省内存空间
#迭代器并不会在内存中占用一大块内存
#而是随着循环,每次生成一个
#每次next,每次给我一个

#range

# l = [1,2,3,4,5,6]
#
# iterator = l.__iter__()
# while True:
# ret = iterator.__next__()
# print(ret)

# print(range(100000))
# print(list(range(1000000)))

#生成一个200万个哇哈哈
# def func():
# for i in range(20000000):
# "wahaha%s"%i

#生成器
# 生成器函数------------本质上是我们自己写的函数
# 生成器表达式

猜你喜欢

转载自www.cnblogs.com/jly1/p/9595497.html