zoukankan      html  css  js  c++  java
  • 学习python的第十二天

    本节主要内容:

    1. ⽣生成器和⽣生成器函数
    2. 列列表推导式

    ⼀、生成器

    1. 通过⽣生成器函数

    2. 通过各种推导式来实现⽣生成器

    3. 通过数据的转换也可以获取⽣生成器

    send和__next__()区别:

    1. send和next()都是让⽣生成器向下走⼀一次

    2. send可以给上⼀一个yield的位置传递值, 不能给后⼀一个yield发送值. 在第⼀一次执⾏行行⽣生

    成器代码的时候不能使⽤用send()
    生成器可以使⽤for循环来循环获取内部的元素:

    ⽣生成器可以使⽤用for循环来循环获取内部的元素

    def func():   

    print(111)   

    yield 222   

    print(333)   

    yield 444   

    print(555)   

    yield 666

    gen = func() f

    or i in gen:   

    print(i)    结果: 111 222 333 444 555 666

    二. 列列表推导式, ⽣生成器表达式以及其他推导式

    lst = [] for i in range(1, 15):    lst.append(i) print(lst)
     替换成列列表推导式:

    lst = [i for i in range(1, 15)] print(lst)
     列列表推导式的常⽤用写法:

    [ 结果 for 变量量 in 可迭代对象 if 条件 ]

    后⼀一个知识点: yield from 在python3中提供了了⼀一种可以直接把可迭代对象中的每⼀一个数据作为⽣生成器的结果进⾏行行返回

    def gen():    l

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

    yield from lst

    g = gen() 

    for el in g:

    print(el)

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

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

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

    yield from lst   

    yield from lst2
    g = gen()

    for el in g:   

    print(el)


     

  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/DanielYang11/p/9892647.html
Copyright © 2011-2022 走看看