python基础 day13 迭代器生成器

#双下方法
# print([1].__add__([2]))
#循环 for
#可for循环的类型:str,list,tuple,dic,set,file,range,enumerate
# print(dir([])) #dir告诉我列表可用的所有方法
# print(dir({}))

# ret=set(dir([]))&set(dir({}))&set(dir(''))&set(dir(range(10)))
# print(ret)
# print('__iter__' in dir(int))
# print('__iter__' in dir(list))
# print('__iter__' in dir(tuple))
# print('__iter__' in dir(set))
# print('__iter__' in dir(enumerate([])))
# print('__iter__' in dir(bool))
# print(list.__iter__([])) #迭代器 iterator
#一个列表执行了__iter__方法之后的返回值,就是一个迭代器
#print(set(dir([].__iter__()))-set(dir([]))) #迭代器和所有方法的差集
# l=[1,2,3]
# print(l.__iter__().__length_hint__()) #元素个数
# iterator=l.__iter__()
# print(iterator.__next__())
# print(iterator.__next__())
# print(iterator.__next__())
#只要拥有__ iter__方法的都是可迭代的,通过__next__()可以从迭代器中一个一个取值
#只要拥有__ iter__方法的都是可迭代的---->可迭代协议


#迭代器的概念:
##迭代器协议:内部含有__iter__方法和__next__方法的就是迭代器
#可迭代协议:只要拥有__ iter__方法的都是可迭代的,都可以被for 循环
#可迭代对象使用__iter__方法就生成了一个迭代器

#for 循环其实就是在使用迭代器

#迭代器的好处:
#可以从容器中一个一个的取值,所有的值都能够取到
#节省内存空间:迭代器并不会在内存中占用一大块内存,而是通过next每次给我一个

# print(range(1000000000000))
# print(list(range(1000000)))
# l=[1,2,3,4,5] #通过next方法一个一个取值
# iterator=l.__iter__()
# while True:
# ret=iterator.__next__()
# print(ret)

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

# def get():
# for i in range(2000000):
      yield 'wahaha%s'%i
#生成器函数
# def gennerator():
# print(1)
# return 'a'
# ret=gennerator()
# print(ret)

#只要含有yield关键字的函数都是生成器
#yield不能与return共用且只需要写在函数内
# def gennerator(): #生成器函数返回的是一个生成器
# print(1)
# yield 'a'
# print(2)
# yield 'b'
# ret=gennerator()
# # print(ret)
# # print(ret.__next__())
# # print(ret.__next__())
def wahaha():
for i in range(2000000):
yield 'whahaha%s'%i
g=wahaha()
count=0
for i in g:
count+=1
print(i)
if count>50:
break
print('********',g.__next__())

#生成器:就是一个迭代器
#生成器函数:我们自己写的函数
#生成器表达式

转载于:https://www.cnblogs.com/Forget-the-sky/p/10652225.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值