zoukankan      html  css  js  c++  java
  • 迭代器

    迭代器

    什么是迭代器:

    迭代:更新换代的过程,每次迭代都必须基于上一次的结果

    迭代器:迭代取值的工具

     

    迭代器特点:

    1:只能往后面走,

     

    为什么要用:

    迭代器给你提供了一种不依赖于索引的取值方式

     

    可迭代对象:

    只要内置有iter方法的都叫作可迭代对象

    # 读法: 双下iter(标准一些) or 魔法方法

    n = 1 # 没有

    f = 1.1 # 没有

    s = 'hello' # 有

    l = [1,2,3] # 有

    t = (1,2,3) # 有

    s1 = {1,2,3} # 有

    d = {'1':'2'} # 有

    f1 = open('xx.txt','w',encoding='utf-8') # 有

    文件对象本身就是迭代器对象

    def func():pass # 没有

     

    需要迭代取值的数据类型

    """

    字符串,

    列表,

    元组,

    字典,   # 无序

    集合,   # 无序

    文件对象  # 本来就是迭代器对象

    """

     

    如何用:

    # 不是迭代

    n = 0

    while True:

    print(n)

    # 算是迭代(依赖索引)

    l = [1,2,3,4]

    n = 0

    while n < len(l):

    print(l[n])

    n += 1

     

     

    迭代器取值

    迭代器取值迭代器对象

    1:对象有iter方法

    2:内置有next方法

    ps:迭代器一定是可迭代对象

    可迭代对象不一定是迭代器对象………………7.04(03)

    可迭代对象不会直接由next

     

    (文件 本身就是迭代器对象)

     

    迭代器取值

     

    l = [1,2,3,4]
    
    # 生成一个迭代器对象
    
    iter_l = l.iter()
    
     
    
    # 迭代器取值 调用next
    
    print(iter_l.next()) # >>>1
    
    print(iter_l.next()) # >>>2
    
    print(iter_l.next()) # >>>3
    
    print(iter_l.next()) # >>>4
    
    print(iter_l.next()) # 取完了 直接报错
    
     

     

     

    for循环原理

    for循环内部的本质

    1.将in后面的对象调用iter转换成迭代器对象

    2.调用next迭代取值

    3.内部有异常捕获StopIteration,当next报这个错 自动结束循环

     

    for循环

    '''

    for循环后面的跟的是可迭代对象

     

    for 循环内部的本质

    1:将in后面的对象效调用iter转换为迭代器对象s

    所以有一个'print(iter_f is f1'

     

    迭代器对象无论执行多少次执行iter方法,得到的还是迭代器本身

     

     

    2:调用next迭代取值

    3:内部有异常捕获StopIteration的方法,遇到错误就结束循环

    '''

     

     

    生成器

    生成器:用户自定义的迭代器,本质就算迭代器

     

    yield

     

    迭代器生成器:

     

    def func():
    
    print('first')
    
    yield 1 # 如果函数内部有yield关键字,那么加括号运行的时候不会触发函数内部代码执行
    
    func() # 初始化生成器()

     

    生成器表达式

    res = (i for i in range(1,10) if i != 4) # 生成器表达式
    
    # # 生成器写好了不会主动执行任何一行代码
    
    # # 必须通过next触发代码执行
    
    # # 写好的时候不执行,只是调用的时候才执行,
    
     
    
    print(res.next())
    
    print(res.next())
    
    print(res.next())
    
    print(res.next())

     

  • 相关阅读:
    marshaller unmarshaller解析xml和读取xml
    request请求地址
    SAP系统接口方式:
    SAP 后台job
    查找系统锁对象
    动态生成ABAP程序-资料
    BDC程序步骤
    ABAP 创建测试文件
    ALE和IDocs
    ABAP锁,数据库锁
  • 原文地址:https://www.cnblogs.com/pscly/p/11190963.html
Copyright © 2011-2022 走看看