zoukankan      html  css  js  c++  java
  • 推导式,生成器,迭代器

    推导式

    列表推导式

    不用推导式时,创建一个列表的操作:

    list_a = []

    for i in range(1,101):

      list_a.append(i)

    使用列表推导式:

    list_b = [i for i in range(1,101)]

    字典推导式

    用字典推导式时,创建一个字典的操作:

    a = "c='bi;p=153;s=0;id=d0;bd=123"

    dict_a = {i.split("=")[0]:i.split("=")[1] for i in a.split(";")}

    生成器

    在上面的推导式表达式中,我们可以看到,列表推导式的表达式是[],字典推导式的表达式是{},那么当推导式的表达式是()时,会得到什么结果呢?

    ()--我们称为生成器表达式,通过()表达式得到的结果是一个生成器对象

    如:

    generator_a = (i for i in range(1,11))

    generator_a就是一个生成器,我们可以通过list(generator_a)得到一个列表,通过tuple(generator_a)得到一个元组

    如果我们想从生成器里面取出一个元素,可以使用内置函数:next(genertaor_a),每次从上一次取出的元素位置往后再取出一个元素,如果生成器里的元素被取完了,那么会报错:StopIteration:

    除了()表达式来生成一个生成器外,还可以在函数中用一个关键字yield来得到一个生成器对象

    如:

    def func():

      yield 100

      print("hello world")

      yield 1001

      yield 100001

    res = func()

    上面函数如果没有yield这个关键字,那么res为None,因为函数没有return,

    那么像上面的函数一样有yield这个关键字的时候,res就是一个生成器对象,如上面的函数,我们如果想要得到值1001,那么我们可以这样做:

    1,先将生成器对象转化成列表或者元组:res_list = listlist(res)或者res_tuple = tuple(res),然后取下标值如:res_list[1]或者res_tuple[1]得到1001;

    2,使用next(res)方法先得到100,再使用一次next(res),就能得到1001了;

    方法2的原理是:生成器每执行一次next()方法都会在yield关键字那里停下,直到再调用一次next()方法后,它才会在上一次停下的位置重新运行,直到下一个yield关键字又停下,如果后面没有yield关键字了,还使用next()函数取值,那么就会报错:StopIteration;

    迭代器和可迭代对象:

    可迭代对象:可以通过for循环遍历的,都是可迭代对象;

    迭代器:实现了迭代器协议的可迭代对象

    生成器的作用:可以节约内存,提高性能

    迭代器

  • 相关阅读:
    23个精美的的国外网站设计作品推荐欣赏
    javascript / js数据类型,数据类型转换
    让人兴奋的视差滚动(Parallax Scrolling)效果网站分享
    手机网页应用的交互设计
    qq空间等闪动的文字怎么做?
    用CSS实现首字下沉效果,仿word的首字下沉
    35 套精美的 PSD 图标素材,网页素材下载
    使用纯CSS实现圆角边框并完美兼容
    推荐给 JavaScript 开发者十款超级有用的工具来提高客户体验
    40款非常漂亮的 HTML5 & CSS3 网站模板免费下载欣赏
  • 原文地址:https://www.cnblogs.com/lzh501/p/11298659.html
Copyright © 2011-2022 走看看