zoukankan      html  css  js  c++  java
  • 面试题收集

    1. 生成器的惰性机制: 生成器只有在访问的时候才取值. 说白了. 你找他要他才给你值. 找他要. 他是不会执行的.

    def func():

      print(111)

      yield 222

    g = func() # ⽣成器g

    g1 = (i for i in g) # 生成器g1. 但是g1的数据来源于g

    g2 = (i for i in g1) # ⽣成器g2. 来源g1

    print(list(g)) # 获取g中的数据. 这时func()才会被执行. 打印111.获取到222. g完毕.

    print(list(g1)) # 获取g1中的数据. g1的数据来源是g. 但是g已经取完了. g1 也就没有数据了

    print(list(g2)) # 和g1同理

    深坑==> 生成器. 要值得时候才拿值.

    2.

    def add(a, b):

      return a + b

    def test():

      for r_i in range(4):

      yield r_i # 0、1、2、3

    g = test()

    for n in [2, 10]:

      g = (add(n, i) for i in g)

    print(list(g))

    把for循环拆分  对g进行分别命名 比较好理解

    def add(a, b):

      return a + b

    def test():

      for r_i in range(4):

      yield r_i # 0、1、2、3

    g = test()

    n=2

    g2 = (add(n, i) for i in g1)

    n=10

    g2 = (add(n, i) for i in g1)

    print(list(g2))

    3. 一种可以直接把可迭代对象中的每一个数据作为⽣成器的结果进⾏返回——yield from

    ⼩坑: yield from是将列表中的每⼀个元素返回. 所以. 如果写两个yield from 并不会产生交替的效果.

    def gen():

      lst = ["⿇花藤", "胡辣汤", "微星牌饼铛", "Mac牌锅铲"]

      lst2 = ["饼铛还是微星的好", "联想不能煮鸡蛋", "微星就可以", "还可以烙饼"]

      yield from lst

      yield from lst2

    g = gen()

    for el in g:

      print(el)

  • 相关阅读:
    微软开发中心的rss历史记录(22)
    asp.net dll 动态生成和调用(转)
    准备写博了
    来博客园报道啦
    web爬行器的准备工作
    跨浏览器设置标签样式
    感谢我身边的朋友们
    难过的一天:(
    12月:期待好运来
    11月 难过一整个世界都寂寞
  • 原文地址:https://www.cnblogs.com/honghong7725/p/9897181.html
Copyright © 2011-2022 走看看