zoukankan      html  css  js  c++  java
  • 生成器,迭代器。及表达式、推导式

    1、迭代器

    可迭代对象:内部含有__iter__方法的就是可迭代对象

    可迭代对象不能取值,因为内部不含有__next__方法

    可迭代对象--》迭代器  :obj.__iter__(),iter(obj)

    迭代器:内部含有__iter,__next__方法的对象

    迭代器的优点:1,节省内存

            2,惰性机制

            3,单向,不可逆

    如何判断可迭代对象,迭代器?

    1,有没有__iter__方法  dir()方法

    2,isinstance(对象,lterable)方法

     l1 = [1, 2, 3]
     from collections import Iterable
     from collections import Iterator
    print(isinstance(l1,Iterable))
     print(isinstance(l1,Iterator))
     print(isinstance(l1,list))

    2、生成器

    解释:自己用python代码写的迭代器就是生成器, 生成器的本身就是迭代器

    函数中如果出现了yield,这个函数就是生成器函数

    这个时候执行函数,获取到生成器。

    使用__next__()执行到下一个yield,send()也有这个功能

    区别:

    __next__()方法不能赋值

    send()可以赋值,在执行send()之前执行__next__()

    生成器的优点:

    节省内存。

    列表推导式:

    优点:节省代码,一行搞定 缺点:不好排错。

    注:凡是用列表推导式构造的列表对象,用其他方式都可构建.,非常复杂的列表,列表推导式是构建不出的,

    循环模式:  [变量(加工后的变量) for  变量 in  iterable]

    列如:l2 = [i for i in range(1, 14)]

    筛选模式:  [变量(加工后的变量) for 变量 in iterable if 条件] 

    列如:l1 = [i for i in range(1, 31) if i % 3 == 0]

    生成器表达式

    循环模式   g_obj = ('python%s期' % i for i in range(1,14)) 
    筛选模式   g_obj1 = ('python%s期' % i for i in range(1,14) if i % 2 == 0)

    取数:print(g_obj.__next__())

    或者:

      for i in g_obj1:
          print(i)

  • 相关阅读:
    软件工程专业必须要会的算法
    软工实践寒假作业(1/2)
    我的思维导图
    个人简历
    当初希望自己是如何投入这个专业的学习的?曾经做过什么准备,或者立下过什么FLAG吗?
    当初对"软件工程"这个专业的期待和想象是什么?
    洛谷 题解 P1736 【创意吃鱼法】
    2018NOIP赛后总结+后阶段信奥学习个人规划
    洛谷 题解 P5015 【标题统计】 NOIP2018 普及组 T1
    NOIp考前注意事项
  • 原文地址:https://www.cnblogs.com/duanhaoxin/p/9203920.html
Copyright © 2011-2022 走看看