zoukankan      html  css  js  c++  java
  • 迭代器,生成器,内置函数补充

    迭代器

    什么是迭代器
        迭代:更新换代(重复)的过程,每次的迭代都必须基于上一次的结果
        迭代器:迭代取值的工具
    
    为什么要用
        迭代器给你提供了一种不依赖于索引取值的方式
    
    # 可迭代对象:有__iter__()方法的对象是可迭代对象,可迭代对象调用__iter__()得到迭代器对象
    # 迭代器对象:有__iter__()方法和__next__()方法的对象是迭代器对象,迭代器对象依赖__next__()方法进行取值
    
    基本数据类型中
        是可迭代对象的有
            str list tuple dict set 
            文件对象(执行内置的__iter__之后还是本身 没有任何变化):文件对象本身就是迭代器对象
    
    # ps:迭代器一定是可迭代对象而可迭代对象不一定是迭代器对象
    #      迭代器对象无论执行多少次__iter__方法得到的还是迭代器对象本身
    
    迭代取值:
        优点
            1.不依赖于索引取值
            2.内存中永远只占一份空间,不会导致内存溢出
        
        缺点
            1.不能够获取指定的元素
            2.取完之后会报StopIteration错
    
    补充:针对双下线开头双下划线结尾的方法
    推荐读:双下+方法名            

    for循环迭代器

    for循环内部的本质
        1.将in后面的对象调用__iter__转换成迭代器对象
        2.调用__next__迭代取值
        3.内部有异常捕获StopIteration,当__next__报这个错 自动结束循环

    生成器

    # 生成器:自定义的迭代器对象
    #     -- 就是用函数语法来声明生成器,用yield关键字取代return关键字来返回值,参数没有多少变化
    
    # 函数内如果有yield关键字,那么加括号执行函数的时候并不会触发函数体代码的运行,而是生成得到 生成器对象,生成器对象就是迭代器对象,可以通过 __next__() 进行取值
    
    # # yield后面跟的值就是调用迭代器__next__方法你能得到的值
    # # yield既可以返回一个值也可以返回多个值 并且多个值也是按照元组的形式返回
    # 生成器初始化:将函数变成迭代器
    
    yield
        1.提供了一种自定义生成器方式
        2.会将函数的运行状态暂停住
        3.可以返回值
        使用.send()可以给yield左边的变量传参,并直接触发__next__方法,但需要之前已经使用过一次__next__方法
    
    def dog(name):
        print('%s 准备开吃'%name)
        while True:
            food = yield
            print('%s 吃了 %s'%(name,food))
    # g = dog('egon')
    # g.__next__()  
    #g.send('狗不理包子')  
    # g.send('饺子')
    
    与return之间异同点
        相同点:都可以返回值,并且都可以返回多个
        不同点:
            yield可以返回多次值,而return只能返回一次函数立即结束
            yield还可以接受外部传入的值

    生成器表达式

    (变量i for 变量i in 容器类数据 if 条件)  #其他if分支结构不支持

     内置函数补充

    abs()  # 求绝对值
    
    all()  #判断容器内数据只要有一个数据为False就返回False
    
    any()  #判断容器内数据只要有一个数据为True就返回True
    
    locals() # 当前语句在哪个位置 就会返回哪个位置所存储的所有的名字
    
    globals() # 无论在哪 查看的都是全局名称空间
    
    callable()  # 判断是否可以调用
    
    chr()  # 将数字转换成ascii码表对应的字符
    ord()  # 将字符按照ascii表转成对应的数字
    
    dir()  # 获取当前对象名称空间里面的名字
    
     eval()  # 执行字符串中简单语法的python代码
     exec() # 执行字符串中复杂的python代码
    
    isinstance()  # 判断对象是否属于某个数据类型
    
    pow()  #第一个参数的第二个参数次方
    round() # 将数字数据四舍五入
  • 相关阅读:
    JAVA C 数据类型对应
    JAVA javah
    JAVA java
    JAVA javac
    JAVA jar命令(一)-jar打包class文件
    Unity 中调用Android的JAVA代码
    unity 打包Apk生成签名证书keystore
    SQL Server 备份还原
    C/C++ warning C4251: class ... 需要有 dll 接口由 class“..” 的客户端使用
    如何修复 WordPress 中的 HTTP 错误
  • 原文地址:https://www.cnblogs.com/george-007/p/11192074.html
Copyright © 2011-2022 走看看