zoukankan      html  css  js  c++  java
  • python之迭代器 生成器

    一、迭代器

    1.可迭代对象

    1 #方法一: dir(被测对象) 如果 他含有__iter__ ,那这个对象就叫做可迭代对象
    2 s2 = 'abcd'
    3 s3 = s2.__iter__()
    4 print('__iter__' in dir(s2))
    5 print('__iter__' in dir(s3))
    6 print('__next__' in dir(s2))
    7 print('__next__' in dir(s3))
    8 # 只含有__iter__方法的数据是可迭代对象
    9 # 含有__iter__方法,并且含有__next__方法的数据是迭代器
    1 # 方法二 测试他是迭代器还是可迭代对象
    2 l = [1,2,3]
    3 l_iter = l.__iter__()
    4 from collections import Iterable
    5 from collections import Iterator
    6 print(isinstance(l,Iterable))
    7 print(isinstance(l,Iterator))
    8 print(isinstance(l_iter,Iterator))
    9 print(isinstance(l,list))

    2.迭代器的意义

    • 迭代器节省内存
    • 迭代器惰性机制
    • 迭代器不能反复,一直执行下去

    3.for循环的机制

     1 #内部含有__iter__方法,他会将可迭代对象先转化成迭代器.
     2 #,然后在调用__next__方法.
     3 # 他有异常处理的方法.
     4 for i in [1,2,3]:
     5     print(i)
     6 l = [1,2,3]
     7 l_iter = l.__iter__()
     8 while True:
     9     try:
    10         print(l_iter.__next__())
    11     except StopIteration:
    12         break

    4.可迭代对象: str list tuple dict set range

       迭代器: 文件句柄

    二、生成器

    1.什么是生成器

    • 生成器的本质就是迭代器,生成器是自己用python代码写的迭代器
    • 可以用生成器函数
    • 可以用各种推导式构建迭代器
    • 可以通过数据转化

    2.生成器函数 生成器

     1 def gener():
     2     print('aaa')
     3     yield 222
     4     print('bbb')
     5     yield 333
     6     print('ccc')
     7 g = gener()
     8 print(g)
     9 print(g.__next__())
    10 print(g.__next__())

    3.return yield 区别

    • return 返回给调用者值,并结束此函数
    • yield 返回给调用者值,并将指针停留在当前位置

    4.send

    • send和next功能一样
    • 给上一个yield整体发送一个值
    • send不能给最后一个yield发送值
    • 获取第一个值的时候,不能用send 只能用next
       1 def gener():
       2     yield 222
       3     count = yield 333
       4     print('-------->',count)
       5     yield 'aaa'
       6     yield 'bbb'
       7 g = gener()
       8 print(g.__next__())
       9 print(g.send(None))
      10 print(g.send('AAAA'))
  • 相关阅读:
    iOS开发数据库篇—SQLite简单介绍
    iOS FMDatabase 本地数据库的创建和几个基本使用方法
    iOS开发-CoreMotion框架
    ios中陀螺仪CoreMotion的用法
    iOS摄像头和相册-UIImagePickerController-浅析
    iOS使用AVCaptureSession自定义相机
    在iOS上实现一个简单的日历控件
    iOS开发UI篇—Button基础
    在Virt-manager中使用snapshot功能
    Node.js学习
  • 原文地址:https://www.cnblogs.com/xiaobin12126/p/8423755.html
Copyright © 2011-2022 走看看