zoukankan      html  css  js  c++  java
  • Python从入门到放弃_发生器


    # 1. 生成器

    # def func(): # 定义函数
    # print(1) # 函数体
    # # 没有返回的时候默认返回None 把返回值返回给调用者
    # print(func()) # 调用函数

    # def foo():
    # for i in range(5):
    # print(i)
    # return i
    #
    # print(foo()) # 0,1,2,3,4 4

    # 只要函数中不存在yield就是正常函数,存在了yield就不正常了
    # 生成器一个能自己定义一些逻辑的,
    # 迭代器一个是拿自己写好的数据结构元素

    # def foo(): # yield 关键字
    # print(1)
    # yield 4 # yield 返回值 记录执行到哪里 停止
    # print(2)
    # yield 5
    #
    # g = foo() # <generator object foo at 0x021246C0> #产生一个生成器
    # print(g.__next__()) # g.__next__ 触发启动这个生成器
    # print(g.__next__()) # g.__next__ 触发启动这个生成器

    # def foo(): # yield 关键字
    # print(1)
    # return 4 # yield 返回值 记录执行到哪里 停止
    # print(2)
    # return 5
    # foo()


    # 生成器定义: 函数体中存在yield就是生成器,函数+()就产生 生成器
    # 生成器 只能向下执行
    # 正常函数中,函数+()调用在个函数

    # def foo(): # yield 关键字
    # print(1)
    # yield 4 # yield 返回值 记录执行到哪里 停止
    # print(2)
    # yield 5

    # # 函数体里有yield就是辨别是生成器还是函数
    # g = foo() # 创建一个生成器
    # g.__next__() # 生成器是基于函数创建的

    # 生成器的好处
    # 节省空间

    # li = []
    # def gen():
    # for i in range(20000):
    # print(i)
    # li.append(i)
    # gen()
    # print(li)
    #
    # def gen():
    # for i in range(20000):
    # yield i
    #
    # g = gen()
    # for i in range(10):
    # print(g.__next__())

    # def gen():
    # print(1)
    # yield 1
    # print(2)
    # yield 3
    # yield 4
    # yield 5
    #
    # g = gen()
    # print(next(g)) # 作废了
    # print(next(g)) # 作废了
    # print(next(g)) # 作废了
    # print(next(g)) # 作废了

    # _next__ 和 yield 要一一对应, 最后的一个yield下边能写就是不运行


    # def foo():
    # def func():
    # print(1)
    # yield 4
    # return func
    # f = foo()
    # g = f()
    # print(g.__next__())


    #下一半  send() 发送

    # def func():
    # print(44) # 44
    # l = yield 5 # 走到这里了 到此一游
    # yield 77
    # print(l) #'你下来我给你钱'
    # yield 66
    #
    # g = func() # 生成一生成器
    # # print(g.__next__()) # 5 # 作废了
    # # print(g.send('黄瓜味脉动')) #send() == __next__ + 传值 # 66
    #
    # print(g.__next__()) # 5 #第一次启动这个生成器的时候 生成器.__next__ 或 生成器.send(None)
    # print(g.send('你下来我给你钱')) # 77
    # print(g.__next__()) # 66


    # def func():
    # def foo():
    # pass
    # yield foo
    # g = func()
    # g.__next__()

    # yield from lst


    # for 循环拆解版
    # def foo():
    # lst = [1,2,3,54]
    # f = yield lst[0]
    # print(f) # '该大不大'
    # f = yield lst[1]
    # print(f) # None
    # f = yield lst[2]
    # print(f) # None
    # f = yield lst[3]
    # print(f)
    # g = foo()
    # print(g.__next__()) # 1
    # print(g.send('该大不大')) #2
    # print(g.__next__()) # 3
    # print(g.__next__()) # 54


    # for循环
    # def foo():
    # lst = [1,2,3,54]
    # for i in lst:
    # f = yield i
    # print(f)
    #
    # g = foo()
    # print(g.__next__()) # 1
    # print(g.send('该大不大')) #2
    # print(g.__next__()) # 3
    # print(g.__next__()) # 54

    # yield from 调用的时候只能使用__next__()啊

    # 推导式:

    # li = []
    # def func():
    # for i in range(10):
    # li.append(i)
    # func()
    # print(li)
    #
    # li = [i for i in range(10)] #[结果,语句] [0,1,2,3,4,5,6,7,8,9] 列表推导式
    # print(li)

    # 筛选
    # li = []
    # def func():
    # for i in range(10):
    # if i >3:
    # if i%2==0:
    # li.append(i)
    # func()
    # print(li)

    # 列表推导式
    # print([i for i in range(10) if i>3 if i%2==0 if i%4== 0])

    # 字典推导式

    # dic = {'1':2,'2':3}
    # lst1 = []
    # lst2 = []
    # for k,v in dic.items():
    # lst1.append(k)
    # lst2.append(v)
    #
    # print(lst1,lst2)


    # 集合推导式

    dic = {'1':2,'2':3}
    d = {i for i in dic.items()}
    print(type(d))


    # 字典推导式
    # lst1 = ['1','2']
    # lst2 = [2,3]
    # d = {lst1[i]:lst2[i] for i in range(2)}
    # print(d)
    # print(type(d))


    # 生成器推导式: #长得像元祖的推导式 其实是生成器推导式

    # l = (i for i in range(1000) if i%3 ==0)
    # for i in range(10):
    # print(l.__next__())
    #
    # def l():
    # for i in range(1000):
    # if i > 3:
    # yield i
    # g = l()
    #
    # for i in range(10):
    # print(g.__next__())


    # 推导式:
    # 列表推导式
    # 集合推导式
    # 字典推导式
    # 生成器推导式

    x = 10
    x%=5
    print(x)

  • 相关阅读:
    QT 开发小记
    linux c 时间函数
    ubuntu 16.04 登录后黑屏
    ubuntu 16.04 修正网卡与ifname对应关系
    HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
    vue里面引入jq的方法
    如何禁用手机自带的输入法软键盘
    vue的首页渲染了两次的原因以及解决方法
    vue使用hightchats
    解决微信小程序使用switchTab跳转后页面不刷新的问题
  • 原文地址:https://www.cnblogs.com/fp233/p/10273992.html
Copyright © 2011-2022 走看看