码迷,mamicode.com
首页 > 编程语言 > 详细

python yeild: send, close, throw

时间:2019-07-14 13:21:50      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:nbsp   erro   exce   def   load   而不是   一个   gen   两种   

send

1. yield可以产出值,可以接收值

2. 在调用send发送非none值之前,我们必须启动一次生成器, 方式有两种

  a. gen.send(None)

  b. next(gen)

def gen_func():
    #1. 可以产出值, 2. 可以接收值(调用方传递进来的值)
    html = yield 1
    print(html)
    yield 2
    yield 3
    return "bobby"

#1. 生成器不只可以产出值,还可以接收值
if __name__ == "__main__":
    gen = gen_func()
    #在调用send发送非none值之前,我们必须启动一次生成器, 方式有两种1. gen.send(None), 2. next(gen)
    url = gen.send(None)
    #download url
    html = "bobby"
    print(gen.send(html)) #send方法可以传递值进入生成器内部,同时还可以重启生成器执行到下一个yield位置
    print(gen.send(html))

 

 

close

 不要随便try catch

def gen_func():
    yield "http://projectsedu.com"
    yield 2
    yield 3
    return "bobby"

if __name__ == "__main__":
    gen = gen_func()
    print(next(gen))
    gen.close()
    print(next(gen))
    print("bobby")

 

 

throw

在yield地方进行捕捉,而不是下一个yield

def gen_func():
    #1. 可以产出值, 2. 可以接收值(调用方传递进来的值)
    try:
        yield "http://projectsedu.com"
    except Exception as e:
        pass
    try:
        yield 2
    except Exception as e:
        pass
    yield 3
    return "bobby"

if __name__ == "__main__":
    gen = gen_func()
    print(next(gen))
    gen.throw(Exception, "download error")
    print(next(gen))
    gen.throw(Exception, "download error1")

 

 

 

python yeild: send, close, throw

标签:nbsp   erro   exce   def   load   而不是   一个   gen   两种   

原文地址:https://www.cnblogs.com/callyblog/p/11183778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!