首页 > 其他分享 >迭代器的总结和生成器

迭代器的总结和生成器

时间:2023-09-14 19:11:40浏览次数:42  
标签:总结 迭代 生成器 yield start print 取值

迭代器的总结和生成器

  • 迭代器总结(迭代取值和索引取值的对比
  • 生成器(自定义的迭代器)(yield)
  • 生成器表达式
  • yield和return的对比

迭代器总结(迭代取值和索引取值的对比

迭代取值
	1. 不依赖于索引取值的一种取值方式
    2. 不能够重复取值,只能够从左往右固定取值
索引取值
	1. 它能够重复取值(通过索引l[0])
    2. 它需要是容器类型

生成器(自定义的迭代器)(yield)


背景:
	通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,而且创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

  所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间,在Python中,这种一边循环一边计算的机制,称为生成器:generator
  	python中生成器是自定义迭代器的一种
# 生成器如何使用
关键字:yield

'''
当函数中一旦出现了yield关键字,函数在没有被调用的时候仍然是普通函数,但是只要一调用函数,那么,该函数就不是普通函数了
就变成了生成器
'''
def index():
    print('from index')
    print('from index')
    print('from index')
    yield 123,234,345 # 以元组的方式返回
    print('second')
    print('second')
    print('second')
    print('second')
    yield 'hello'
    print('three')
    yield
## 生成器其实就是一个自定义的迭代器
# res.__next__() # 只要你调用next方法,代码就会走到函数中第一个yield关键字所在的位置停住
# res.__next__() # 代码从上一次yield停住的地方继续往下执行,走到遇到下一个yield停住

生成器表达式

def fun(x):
    print(f'请输入:{x}')
    while True:
        y= yield None
        print(x,y)
ser=fun(1)
# print(ser)
ser.send(None)
ser.send(10)
#############


def eater(name):
    print('%s:正在吃...' % name)
    while True:
        food = yield
        print('%s正在吃%s' % (name, food))

'''eater就变成了生成器'''
res=eater('jerry') # 生成器对象:generator object
print(res) # <generator object eater at 0x0000021869489B30
#利用生成器的原理实现range函数的功能
    
def my_range(start, stop=None, step=1):
    if not stop: # 意味着只传了一个参数,stop没有值
        stop = start
        start = 0
    while start < stop:
        yield start
        start+=step

yield和return的对比

yield
	1. 代码遇到yield不会停止,而是停住
    2. yield也可以有返回值,并且还支持多个,以元组的形式返回
    3. yield可以把一个函数变成生成器,next取值
    

return
	1. 代码遇到return就会停止
    2. return可以有返回值并且还支持多个,以元组的形式返回

标签:总结,迭代,生成器,yield,start,print,取值
From: https://www.cnblogs.com/zhangfanshixiaobai/p/17703213.html

相关文章

  • mybatisplus代码生成器 死活连接不上
    dburl改一下:jdbc:mysql://124.220.134.111:3306/content?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai    &useSSL=false一定要加这个鬼东西沃日......
  • 每日总结(phoenix主键自增)
     1CREATETABLEIFNOTEXISTSactive_active(2idBIGINTPRIMARYKEYNOTNULL,3nei_rongVARCHAR4);56CREATESEQUENCEIFNOTEXISTSseq;在上述示例中,我们首先创建了一个名为seq的序列,然后将表active_active的id列定义为BIGINT类型的主键列,并且不允......
  • 迭代器总结、生成器、生成器表达式、常用的68个内置函数
    迭代器总结(迭代取值和索引取值的对比)#迭代器主要就是一个迭代取值,另外一种取值方式就是索引(下标)取值l=[1,2,3,4]res=l.__iter__()res.__next__()#1res.__next__()#2res1=l.__iter__()res1.__next__()#1res1.__next__()#2迭代取值 1.不依赖......
  • Codeforces Round 897 (Div. 2) 考试总结
    前言这次打得很好,相较于div3的脑残题和签到题来说,div2的思维难度更加的大。同时还有除传统题外,其他的题型出现。比如交互题等。这次能在考场上想出三道较于之前是有很大的进步的。赛时实况:ABCDE1E2F√√√××××赛后改题情况:ABCDE1E2F......
  • 异常知识点的总结
    第一部分:异常及异常处理思考:1.什么是异常?python中有哪些异常?===》异常本身是类print(a)#NameError:name'a'isnotdefined错误类型NameErrorprint(3+'a')#TypeError:unsupportedoperandtype(s)for+:'int'and'str'deff:print(123)#......
  • 公司某产品MySql分布式架构总结
    这个是目前公司某产品Server端MySql分布式架构总结(内容总结自wiki),该产品同时使用了Mysql和MongoDB。本篇Blog只做Mysql分布式架构的介绍。----------------------------------------------------一、共4台Linux服务器A\B\C\DAmasterwithslaveBC......
  • 关系数据库扩展知识总结
    最近在学习分布式数据库架构相关的知识(主要是Mysql),并对数据库扩展这部分知识整理总结了一下,希望对看到的人有所帮助,也希望读者能多提建议。-----------------------------------------------------------关系型数据库扩展的几个步骤:一、第一步:主从复制+读写分离......
  • Memcached深入学习总结
    在上一家公司时,产品主要使用memcached做缓存。虽然目前这家公司memcached使用的比较少(刚进公司做云存储相关服务时小规模使用了一下,后来做另一个系统时换redis做了缓存),但前几天整理资料时看到了原先写的memcached相关笔记,在此整理一下发上来。----------------------------------......
  • 代码随想录算法训练营第9天| ●28. 实现 strStr() ●459.重复的子字符串 ●字符串总结
    28.找出字符串中第一个匹配项的下标mydemo--(mythought)--(falied)classSolution{public:intstrStr(stringhaystack,stringneedle){for(inti=0;i<haystack.size();i++){if(haystack[i]!=needle[0])continue;......
  • SQL基础总结(一):关系模型
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。--------------------------------------------------------------- 规范化父子表图示:由父表画出主键画出箭头指向子表外键。满足第一范式的表:列包含原子值,没有重复的组。 当满足下列条件时第一范式的表自动满足第二范式的表:1.......