zoukankan      html  css  js  c++  java
  • python之迭代器、生成器与面向过程编程

    目录


    一、迭代器

    1.迭代器的概念理解

    '''
    迭代器从字面上理解就是迭代的工具。而迭代是每次的开始都是基于上一次的结果,不是周而复始的,而是不断发展的。
    '''
    l=[1,2,3,4]
    
    count=0
    while count<len(l):
        print(l[count])
        count+=1

    2.可迭代对象与迭代器对象

    '''
    (1)可迭代对象:
            可迭代对象就是内置__iter__方法的对象(再次重申,python中一切皆对象)。
    (2)迭代器对象就是内置有__iter__方法和__next__方法的对象。
    
    可迭代对象执行了obj.__iter__()得到的结果就是迭代器对象,迭代器对象执行了obj.__iter__()得到的是迭代器本身。
    
    要明确的一点是迭代器对象一定是可迭代对象,但是可迭代对象不一定是迭代器对象。
    '''
    #字符串
    string='hello world'
    iter_st=string.__iter__()
    while True:
        try:
            print(iter_st.__next__())
        except StopIteration:
            break
    
    #列表
    s=[1,3,4,5,'a']
    iter_s=s.__iter__()
    while True:
        try:
            print(iter_s.__next__())
        except StopIteration:
            break
    
    #字典
    dic={'a':1,'b':2}
    iter_dic=dic.__iter__()
    while True:
        try:
            print(iter_dic.__next__())
        except StopIteration:
            break
    
    #集合
    l={1,2,3,4,5}
    iter_l=l.__iter__()
    while True:
        try:
            print(iter_l.__next__())
        except StopIteration:
            break
    实例说明

    3.迭代器的优缺点:

    '''
    优点:
        1.提供了一种不依靠索引取值的迭代方式
        2.执行一次.__next__()方法往内存读一条数据,节省内存
    
    缺点:
        1.无法用len(),甚至在数据读完之前都不会知道数据有多少
        2.只能往后走,不能回退
        3.一次性的
    '''

    补充for循环

    with open('db.txt','r',encoding='utf-8') as f:
        for line in f:
            print(line)
    
    #执行in后的iter_f=f.__iter__()方法得到迭代器对象
    #执行iter_f.__next__(),将得到的值赋值给line,执行循环体代码
    #重复第二步,直到程序抛出StopIteration异常,结束循环

    二、生成器

    '''
    生成器就是迭代器。
    当函数体内有yield时,那么函数名()的结果就是生成器,yield不会执行函数体代码而是保存函数的运行状态。
    '''
    def chicken():
        print('>>>1')
        yield 1
        print('>>>2')
        yield 2
    
    obj=chicken()#拿到生成器对象
    print(obj)#<generator object chicken at 0x000001B3FD8580A0>
    
    res=obj.__next__()#执行第一行,返回>>>1
    print(res)#1
    
    res2=obj.__next__()
    print(res2)
    res3=obj.__next__()#StopIteration
    def eat(name):
        print('%s  ready to eat'%name)
        while True:
            food=yield
            print('%s start to eat %s'%(name,food))
    
    name=input('投喂对象>>>').strip()
    obj=eat(name)
    obj.__next__()
    food=input('食物>>>').strip()
    obj.send(food)
    喂狗小程序
    def is_range(start,stop,step=1):
        n=start
        while n<stop:
            yield n
            n+=step
    
    for i in is_range(10):
        print(i)
    
    #小改动
    def my_range(start=0,stop=1,step=1):
        n=start
        while n<stop:
            yield n
            n+=step
    
    for i in my_range(2,10,2):
        print(i)
    自制迭代器

    三、面向过程编程

    '''
    不同的编程范式像不同的武林门派。
    面向过程的编程思想:
        核心就是‘过程’二字,即解决问题的过程
        面向过程编程就好比设计一条流水线,是种机械式的思维方式。
    
    优点:复杂问题流程化、简单化
    缺点:扩展性差,连锁反应
    应用:用于扩展性要求低的场景
    '''
  • 相关阅读:
    【2021-01-07】叫我“何工”就好
    2021年的 目标计划
    转:我在拼多多的三年 https://www.leadroyal.cn/?p=1228#more-1228
    匀强电场等效重力场
    开源图片素材管理软件-civet
    心学#传习录学习
    工作感受月记202101月
    统计字典序元音字符的数量
    可被5整除的二进制
    假期刷题--JAVA
  • 原文地址:https://www.cnblogs.com/qiaoqianshitou/p/8687866.html
Copyright © 2011-2022 走看看