python yeild: send, close, throw

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")

 

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

时间: 2024-10-10 07:54:41

python yeild: send, close, throw的相关文章

python yeild使用

闲的蛋疼又想起之前看到的文章,想想还是拿来复习一遍写进博客里. 原文链接:https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ yeild可以把普通的function函数,变成 generator生成器. 由原来的return,变为yeild.没调用一次generator.next()就返回一个值,然后停住,等待下次的next(),直到再没有值,raise一个StopIteration. python yeild

python yeild 生成器

python yeild  生成器 生成器函数在生成值后自动挂起并且暂停它的执行和状态(常常在从头计算整个系列的值或者手动保存和恢复类中的状态时,作为一种解决方案) 生成器在被挂起时自动保存状态,yield将函数挂起后将向调用者返回一个值 ////////////////经过单步执行 可以看到(1)和(2)是交替执行的 >>> def  gensqures(N):       ////(1) """""" for i in ra

python 生成器 send

#!/usr/bin/python3 def MyGenerator(): value=yield 1 yield value return done gen=MyGenerator() print(next(gen)) print(gen.send("I am Value")) 生成器内有一个方法send,可再次传入一个值. 上面那句可能听不懂,但是不要紧,我们先来看看代码, #!/usr/bin/python3 def MyGenerator(): value=yield 1 yi

python trojan development 1st —— use python to send mail

1 import smtplib 2 from email.mime.text import MIMEText 3 msg_from='1@qq.com' #发送方邮箱 4 passwd='bd' #填入发送方邮箱的授权码 5 msg_to='1@qq.com' 6 7 8 subject="python邮件测试" #主题 9 content="这是我使用python smtplib及email模块发送的邮件" 10 msg = MIMEText(content)

python trojan development 2nd —— use python to send mail and listen to the key board then combine them

今晚先上代码,明天再说怎么写的,请勿用于非法用途!!!!! 1 from pynput.keyboard import Key,Listener 2 import logging 3 import os 4 import smtplib 5 from email.mime.text import MIMEText 6 from PIL import ImageGrab 7 import random 8 from time import * 9 from email.mime.multipart

python yeild and generator

https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do?page=1&tab=votes#tab-top 原文地址:https://www.cnblogs.com/lion-zheng/p/9784681.html

Python基础教程(第九章 魔法方法、属性和迭代器)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5437223.html______ Created on Marlowes 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称

Python快速学习第十二天--生成器和协程

yield指令,可以暂停一个函数并返回中间结果.使用该指令的函数将保存执行环境,并且在必要时恢复. 生成器比迭代器更加强大也更加复杂,需要花点功夫好好理解贯通. 看下面一段代码: [python] view plain copy def gen(): for x in xrange(4): tmp = yield x if tmp == 'hello': print 'world' else: print str(tmp) 只要函数中包含yield关键字,该函数调用就是生成器对象. [pytho

Python基础教程【读书笔记】 - 2016/7/24

希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第九波:第9章  魔法方法.属性和迭代器  在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.已经出现过一些这样的名称(比如__future__),这种拼写表示名字有特殊含义,所有绝不要在自己的程序中使用这种名字. 在Python中,由这些名字组成的集合所包含的方法称为魔法方法(或称特殊方法).如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下被Python调用,而几乎没有直接调用