zoukankan      html  css  js  c++  java
  • Python--day4

    1.迭代器原理及使用

      迭代器&生成器

    迭代器

    迭代器是访问集合元素的一种方式.且带起对象从集合的第一个元素开始访问,知道所有的元素被访访问玩结束,迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退,另外迭代器的一大优点是不要求事先准备好整个迭代过程,中所有的元素,迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元祖可以不存在或者被销毁,这个特点使得他特别适合用于便利一些巨大的或是无限的集合,比如几个G的文件.

      特点:

      1.访问者不需要关心迭代器内部的结构,仅需要通过next()方法不断取下一个内容.

      2.不能随机访问集合中的某个值,只能从头到尾依次访问

      3.访问到一半时不能方回退

      4.便于循环比较大的数据集合,节省内存.

    迭代器不能通过下标的方式来取值的,

     1 __author__ = 'Administrator'
     2 a = iter(['aa','bb','cc'])
     3 print(a[1])
     4 ------------------------------------------------------------------------------------
     5 输出:
     6 Traceback (most recent call last):
     7   File "E:/python/day1/day4/迭代器.py", line 3, in <module>
     8     print(a[1])
     9 TypeError: 'list_iterator' object is not subscriptable
    10 可见迭代器不能用这方方法来取,
    11 
    12 ------------------------------------------------------------------------------------
    13 __author__ = 'Administrator'
    14 a = iter(['aa','bb','cc'])
    15 print(a.__next__())
    16 print(a.__next__())
    17 print(a.__next__())
    18 ------------------------------------------------------------------------------------
    19 输出:
    20 aa
    21 bb
    22 cc
    迭代器取值方法

    生成器generator

    定义: 一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器

     1 __author__ = 'Administrator'
     2 def cash_money(amount):
     3     while amount > 0:
     4         amount -=100
     5         yield 100
     6         print("aaasdfasdfsadfaaaa")
     7    # print(" mei qian le!!!")
     8 
     9 atm = cash_money(500)
    10 print(type(atm))
    11 print(atm.__next__())
    12 print(atm.__next__())
    13 print(atm.__next__())
    14 print(atm.__next__())
    15 print(atm.__next__())
    16 print(atm.__next__())
    17 --------------------------------------------------------------------------------
    18 #生面定义了一个函数,函数调用的时候返回的是迭代器(generator),然后函数中包含了 yield 语法 所以就变成了生成器
    19 #生成器在调用的时候就用到了next()
    20 
    21 #输出:
    22 #输出的是函数返回的 类型
    23 <class 'generator'>
    24 #提示第一次取钱
    25 100
    26 #当第二次取钱的时候就会执行print 中的内容,由此可以说明,当第一次执行完之后,程序并没有结束,
    27 aaasdfasdfsadfaaaa
    28 100
    29 aaasdfasdfsadfaaaa
    30 100
    31 aaasdfasdfsadfaaaa
    32 100
    33 aaasdfasdfsadfaaaa
    34 100
    35 aaasdfasdfsadfaaaa
    36 #当打印到第五次的时候表示已经没有值了 所以会有了以下的提示
    37 Traceback (most recent call last):
    38   File "E:/python/day1/day4/迭代器.py", line 16, in <module>
    39     print(atm.__next__())
    40 StopIteration
    生成器小案例
  • 相关阅读:
    [C/C++] 指针数组和数组指针
    [计算机网络] DNS劫持和DNS污染
    [计算机网络-数据链路层] CSMA、CSMA/CA、CSMA/CD详解
    [BinaryTree] 二叉树常考知识点
    NODE-windows 下安装nodejs及其配置环境
    MATLAB/Excel-如何将Excel数据导入MATLAB中
    Excel-怎样实现行列转置
    一篇文章学懂Shell脚本
    SQL-MySQL使用教程-对MySQL的初步尝试
    资源贴-在线编译环境推荐
  • 原文地址:https://www.cnblogs.com/nb-blog/p/5163329.html
Copyright © 2011-2022 走看看