zoukankan      html  css  js  c++  java
  • Python-三元表达式、迭代器,生成器

    一、三元表达式

    name=input('姓名>>: ')
    res='SB' if name == 'alex' else 'NB'
    print(res)

    表达式为True,返回前面的结果,若为False ,返回后面的结果

    列表生成式:

    l=[1,2,3,4,5]
    l=[i*2 for i in li]
    
    #print
    [2,4,6,8,10]

    生成器表达式

    #1、把列表推导式的[]换成()就是生成器表达式
    
    #2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
    >>> chicken=('鸡蛋%s' %i for i in range(5))
    >>> chicken
    <generator object <genexpr> at 0x10143f200>
    >>> next(chicken)
    '鸡蛋0'
    >>> list(chicken) #因chicken可迭代,因而可以转成列表
    ['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4',]
    
    #3、优点:省内存,一次只产生一个值在内存中

    二、迭代器

    迭代器即迭代的工具,那什么是迭代呢?
    #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值
    while True: #只是单纯地重复,因而不是迭代
        print('===>') 
        
    l=[1,2,3]
    count=0
    while count < len(l): #迭代
        print(l[count])
        count+=1
    #1、为何要有迭代器?
    对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器
    
    #2、什么是可迭代对象?
    可迭代对象指的是内置有__iter__方法的对象,即obj.__iter__,如下
    'hello'.__iter__
    (1,2,3).__iter__
    [1,2,3].__iter__
    {'a':1}.__iter__
    {'a','b'}.__iter__
    open('a.txt').__iter__
    
    #3、什么是迭代器对象?
    可迭代对象执行obj.__iter__()得到的结果就是迭代器对象
    而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象
    
    文件类型是迭代器对象
    open('a.txt').__iter__()
    open('a.txt').__next__()
    
    
    #4、注意:
    迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象

    for循环

    #基于for循环,我们可以完全不再依赖索引去取值了
    dic={'a':1,'b':2,'c':3}
    for k in dic:
        print(dic[k])
    
    #for循环的工作原理
    #1:执行in后对象的dic.__iter__()方法,得到一个迭代器对象iter_dic
    #2: 执行next(iter_dic),将得到的值赋值给k,然后执行循环体代码
    #3: 重复过程2,直到捕捉到异常StopIteration,结束循环
    迭代器的优缺点:
    优点: - 提供一种统一的、不依赖于索引的迭代方式 - 惰性计算,节省内存 缺点: - 无法获取长度(只有在next完毕才知道到底有几个值) - 一次性的,只能往后走,不能往前退

    三、生成器:
    只要函数内部包含有yield关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部代码
    def func():
        print('====>first')
        yield 1
        print('====>second')
        yield 2
        print('====>third')
        yield 3
        print('====>end')
    
    g=func()
    print(g) #<generator object func at 0x0000000002184360> 

    生成器是迭代器,迭代器不一定是生成器。

    yield总结

    1、把函数做成迭代器

    2、对比return,可以返回多次值,可以挂起/保存函数的运行状态

     
     
  • 相关阅读:
    jquery的内容(html,.text,val)及其属性(attr,prop,data)
    jquery对象的遍历
    jquery的选择器和过滤器
    jquery的基础认知
    解决跨域的四种常见方法
    HTTP中的消息头
    使用js实现ajax加载json文件的组件开发
    IDEA工具第四篇:项目导航Project Navigation下工程包的折叠与展开
    IDEA工具第三篇:启动时报错javax.imageio.IIOException: Can't get input stream from URL!
    IDEA工具第一篇:细节使用-注意事项
  • 原文地址:https://www.cnblogs.com/hexiaorui123/p/10109774.html
Copyright © 2011-2022 走看看