zoukankan      html  css  js  c++  java
  • 2018.09.28python学习第十三天part2

    part2
    迭代器
    # 1. 什么是迭代器(what)
    # 迭代指的是一个重复的过程,每一次重复都是基于上一次的结果而来的
    # li=['a','b','c','d','e']
    # li=('a','b','c','d','e')
    # li='hello'
    #
    # i=0
    # while i < len(li):
    # print(li[i])
    # i+=1
    # 迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值
    # 2. 为何要用迭代器?(why)
    # 为了找出一种通用的&可以不依赖于索引的迭代取值方式
    #
    # 3. 如何用迭代器?(how)
    # 可迭代的对象:但凡内置有.__iter__方法的对象都称之为可迭代的对象
    # str,list,tuple,dict,set,file
    # 迭代器对象:既内置有__iter__方法,又内置有__next__方法
    # file
    # 关于__iter__方法:
    # 调用可迭代对象的__iter__会的到一个迭代器对象
    # 调用迭代器对象的__iter__会的到迭代器本身
    #
    """
    可迭代的对象——————》迭代器对象:
    调用可迭代对象内置的.__iter__方法会有一个返回值,该返回值就是对应的迭代器对象
    """
    # eg.1
    # dic={'x':1,'y':2,'z':3}
    # res1=dic.__iter__()
    # print(res1)#res1 就是dic调用__iter__方法后的一个返回值,
    # res2=res1.__next__()
    # print(res2)#res2 就是既有__iter__方法,又有__next__方法的迭代器对象

    # eg.2
    # dic={'x':1,'y':2,'z':3}
    # # dic=['a','b','c']
    # iter_dic=dic.__iter__()
    #
    # iter_dic=open(r'文件名',mode='rt',encoding='utf-8')
    #
    # while True:
    # try:
    # print(iter_dic.__next__())
    # except StopIteration:###这里是捕捉异常然后结束异常
    # break

    # for循环就是一个迭代器取值的过程,for循环的原理如下:

    # 准确的说for循环应该就是迭代器循环,for循环的原理如下:
    # 1.先调用for...in...中in后面的那个值的__iter__方法,并得到一个返回值(迭代器对象)
    # 2.执行迭代器.__next__()方法得到的一个返回值,然后赋值给一个变量k,运行循环体代码
    # 3.循环往复,知道迭代器取值完毕抛出异常然后捕捉异常自动结束循环。

    # 生成器(‘人造迭代器’)

    # yield关键字:只能用在函数内
    #
    # eg.1
    # def my_range(start,stop,step=1):
    # while start < stop:
    # yield start
    # start+=step
    #
    # res=my_range(1,5,2) # 1 3
    #
    # next(res)
    # next(res)##这就是一个“人造的range()”功能
    # for item in my_range(1,5,2):
    # print(item)
    #
    #
    #

    # eg.2
    # def func():
    # print('this is the first time')
    # yield 1
    # print('this is the second time')
    # yield 2
    # print('this is the third time')
    # yield 3
    # print('this is the fourth time')
    # print(func)##得到一个函数的内存地址
    # g=func()
    # res=g.__next__()
    # print(res)##1
    # res1=g.__next__()
    # print(res1)##2
    # 在函数内单反包括yield关键字,再去执行函数,就不会立刻运行代码了
    # # 会得到一个返回值,该返回值就是生成器,生成器的本质就是迭代器。

    # 总结yield:
    # 1.提供一种自定义迭代器的解决方案
    # 2.yield可用于返回值

    # yield vs return
    # 相同点:都可以用于返回值
    # 不同点:yield是暂停函数,而return是直接结束函数
  • 相关阅读:
    推荐一个c++小巧开源且跨平台的图像解码库
    设计模式---桥接模式
    redis数据结构及其使用场景、持久化、缓存淘汰策略
    mysql------explain工具
    mysql索引数据结构
    java8(2)--- Stream API
    java8(1)--- lambda
    springboot自动装配(2)---实现一个自定义自动装配组件
    springboot自动装配(1)---@SpringBootApplication注解怎么自动装配各种组件
    自己挖的坑跪着也要填完---mapper配置文件和java源文件在同一包下
  • 原文地址:https://www.cnblogs.com/hello-yuanjing/p/9720955.html
Copyright © 2011-2022 走看看