zoukankan      html  css  js  c++  java
  • 生成器和生成器函数,推导式和生产器表达式。

    1. 生成器和生成器函数
    生成器的本质就是迭代器
    生成器的三种创建办法:
    1.通过生成器函数
    2.通过生成器表达式创建生成器
    3.通过数据转换
    生成器函数:
    函数中包含了yield的就是生成器函数
    注意:生成器函数被执行. 获取到的是生成器. 而不是函数的执行
    生成器表达式:
    (结果 for 变量 in 可迭代对象 if 筛选)
    取值:
    1. __next__()
    2. send(值) 给上一个yield位置传一个值, 第一个和最后一个yield不用传值
    3. 可以for循环
    4. list(g)
    2. 各种推倒式和生成器表达式
    1. 列表推倒式 [结果 for 变量 in 可迭代对象 if 筛选]
    2. 字典推倒式 {结果 for 变量 in 可迭代对象 if 筛选} 结果=>key:value
    3. 集合推倒式 {结果 for 变量 in 可迭代对象 if 筛选} 结果=>key

    -------------------------------------------举例试题--------------------------------------------

    # 1. 获取1-100内能被3整除的数
    # lst = [i for i in range(1,101) if i % 3 == 0]
    # 2. 100以内能被3整除的数的平方
    # lst = [i*i for i in range(1,101) if i % 3 == 0]
    # 3. 寻找名字中带有两个e的⼈的名字
    # names = [['Tom', 'Billy', 'Jefferson' , 'Andrew' , 'Wesley' , 'Steven' ,
    # 'Joe'],['Alice', 'Jill' , 'Ana', 'Wendy', 'Jennifer', 'Sherry' , 'Eva']]
    # lst = [name for first in names for name in first if name.count("e") == 2]
    # print(lst)
    #
    # lst = ["衣服%s" % i for i in range(10000)]

    # 生成列表 里面装1-14的数据
    # lst = []
    # for i in range(1,15):
    # lst.append("python%s" % i)
    # print(lst)

    # 列表推倒式; 最终给你的是列表
    # 语法 [最终结果(变量) for 变量 in 可迭代对象]

    # lst = [i for i in range(1,15)]
    # print(lst)

    # [最终结果 for 变量 in 可迭代对象 if 条件]
    lst = [i for i in range(1,101) if i%2==0]
    print(lst)

    ---------------------------------------------------------------------------------------------------

    # dic = {"a":"b", "c":"d"}
    # # 把字典中的key:value互换 .{"b":"a", "d":"c"}
    # new_dic = {dic[key]:key for key in dic}
    # print(new_dic)

    # lst1 = ["alex", "wusir", "taibai", "ritian"]
    # lst2 = ['sb', "很色", "很白", "很牛"]
    # # {"alex":"sb", "wusir":"很色"}
    #
    # dic = { lst1[i]:lst2[i] for i in range(len(lst1))}
    # print(dic)

    # dic = {"a":"b","c":"d"}
    # #把字典中的key:value互换.{"b":"a":"d":"c"}
    # new_dic = {dic[key]:key for key in dic}
    # print(new_dic)
    #
    # #lst1 = ["alex","wusir","taibai","ritian"]
    # #lst2 = ['sb',"很色","很白","很牛"]
    # #{"alex":"sb","wusir":"很色"}
    # dic = {lst1[1]:lst2[i] for i in range(len(lst1))}
    # print(dic)
    #
    # dic = {"a":"b","c":"d"}


    # name = "aleX leNb"
    # e1 = name.find("e", 0,5)
    # print(e1)
    #
    # e2 = name.find("e",5)
    # print(e2)

    # count = 1
    # while count <= len(name):
    # if name[count] =='e':
    # print(count)
    # count = count + 1
    #
    # s = "123a4b5c"
    # s = "asdfer"
    # for c in s: #c :chartor
    # print(c)

    # content = input("请输入内容")
    # lst = content.split("+")
    # s1 = lst[0]
    # s2 = lst[1]
    # a1 = int(s1)
    # a2 = int(s2)
    # print(a1+a2)
    #
    # lst = ["皇阿玛", "皇额娘", "容嬷嬷", "紫薇"]
    # it = lst.__iter__()
    # while True:
    # try:
    # name = it.__next__()
    # print(name)
    # except StopIteration:
    # break
    #
    #
    # dic = {"a":"b", "c":"d"}
    # new_dic = {dic[key]:key for key in dic} #字典的key和value对调
    # print(new_dic)
    #
    #
    # lst1 = ["alex","wusir","taibai","ritian"]
    # lst2 = ['sb',"很色","很白","很牛"]
    # dic = {lst1[i]:lst2[i] for i in range(len(lst1))}
    # print(dic)
    # #列表1和列表二合并,1作为key,2作为value

    # def func():
    # print("111")
    # return 222
    # ret = func()
    # print(ret)


    # def func():
    # print("111")
    # yield 222
    # ret = func()
    # print(ret)

    ----------------------------------------------------------------------------------------------------------------

    def add(a, b):
    return a + b


    def gen():
    for r_i in range(4):
    yield r_i


    g = gen()

    for n in [2, 10]:
    g = (add(n, i) for i in g)
    print(list(g))

    ----------------------------------------------------------------------------------------------------------------------------

    # def func():
    # print("大碴粥")
    # a = yield "11"
    # print(a)
    # print("狗不理")
    # b = yield "22"
    # print(b)
    # print("大麻花")
    # c = yield "33"
    # print(c)
    #
    # g = func()
    # print(g.__next__())
    # print(g.send(1))
    # print(g.send(2))
    # print(g.send(3))

    # __next__() 可以让生成器向下执行一次
    # send() 也可以让生成器向下执行一次, 给上一个yield传一个值, 第一个不能用send(). 最后一个也不要传值


    def eat():
    print("我吃什么啊")
    a = yield "馒头"
    print("a=",a)
    b = yield "大饼"
    print("b=",b)
    c = yield "韭菜盒子"
    print("c=",c)
    yield "GAME OVER"

    gen = eat() # 获取⽣成器

    ret1 = gen. __next__ ()
    print(ret1)
    ret2 = gen.send("胡辣汤")
    print(ret2)
    ret3 = gen.send("狗粮")
    print(ret3)
    ret4 = gen.send("猫粮")
    print(ret4)


    def func():
    yield 11
    yield 22
    yield 33
    yield 44
    g = func()
    lst = list(g) # 可迭代对象
    print(lst)

  • 相关阅读:
    Linux基础知识[2]【延迟及定时机制】
    Linux基础知识[1]【ACL权限】
    docker 入门学习篇【基本命令与操作】
    centos7.1下 Docker环境搭建
    RHEL6.5下更新python至2.7版本
    Github初学者探索
    vmware下linux虚拟机传文件解决方案之 xftp
    mysql 常用操作命令
    常用DNS记录
    SDNU 1481.纪念品分组(水题)
  • 原文地址:https://www.cnblogs.com/songhuasheng/p/9330305.html
Copyright © 2011-2022 走看看