Python生成器传参数及返回值原理解析

作者:Mars.wang 时间:2022-03-17 08:58:40 

一.生成器简介

在python中,带yield的方法不再是普通方法,而是生成器,它的执行顺序不同与普通方法.

普通方法的执行是从头到尾,最后return返回,或者没有返回值

生成器是到yield就返回yield之后的值,然后阻塞,等待next()/send()继续调起生成器

二.next()/send()的异同:

next()/send()都可以调起生成器

next()只能调起生成器返回值,send()还可以对生成器进行传参数,与正常的理解不同,yield表达式左侧的值是send()方法传进来的参数

还有一个有意思的点,第一次send()的时候要求只能send(None)

三.生成器的执行顺序

在yield这一行代码的执行逻辑是这样的,等号右边的yield r先执行,将r返回,阻塞...

等到下次生成器再被调起的时候,yield把传入的参数给n,再继续执行下面的代码,知道yield继续返回...


def consumer():
 r = ''
 while True:
   n = yield r
   if not n:
     return
   print('[CONSUMER] Consuming %s...' % n)
   r = '200 OK'

def produce(c):
 c.send(None)
 n = 0
 while n < 5:
   n = n + 1
   print('[PRODUCER] Producing %s...' % n)
   r = c.send(n)
   print('[PRODUCER] Consumer return: %s' % r)
 c.close()

In [31]: c=consumer()                                                      

In [32]: c.send(None)                                                      
Out[32]: ''

In [33]: c.send(1)                                                      
[CONSUMER] Consuming 1...
Out[33]: '200 OK'

In [34]: c.send(2)                                                      
[CONSUMER] Consuming 2...
Out[34]: '200 OK'

来源:https://www.cnblogs.com/wangbin2188/p/13044748.html

标签:Python,生成器,返回值
0
投稿

猜你喜欢

  • python3.7调试的实例方法

    2022-09-22 17:16:24
  • asp智能脏话过滤系统v1.0

    2011-04-14 11:00:00
  • 如何避免查询调查结果时出现不相关主题的重复记录?

    2009-11-07 18:42:00
  • 爬山算法简介和Python实现实例

    2023-08-10 04:56:29
  • python爬虫爬取图片的简单代码

    2021-08-04 10:19:27
  • Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法

    2022-11-29 08:22:38
  • 使用Filter实现信息的二次检索

    2007-10-08 19:19:00
  • python两种注释用法的示例

    2022-07-22 04:50:50
  • Python字符串格式化输出代码实例

    2021-11-09 16:44:22
  • 使用Python获取字典键对应值的两种方法

    2022-08-04 05:25:16
  • 使用Python中OpenCV和深度学习进行全面嵌套边缘检测

    2021-04-21 10:21:34
  • Python实现RSA加密解密

    2022-04-22 19:07:41
  • 基于Python列表解析(列表推导式)

    2021-11-14 16:31:36
  • oracle数据库下统计专营店的男女数量的语句

    2012-07-11 16:01:17
  • 基于DataFrame筛选数据与loc的用法详解

    2021-09-13 04:37:32
  • Python Numpy中ndarray的常见操作

    2023-08-03 14:27:32
  • Python自动化测试框架之unittest使用详解

    2021-07-02 17:42:27
  • 网红编程语言Python将纳入高考你怎么看?

    2022-06-28 15:48:12
  • 用python删除文件夹中的重复图片(图片去重)

    2021-07-23 22:42:36
  • Python中Selenium模块的使用详解

    2022-03-31 05:53:47
  • asp之家 网络编程 m.aspxhome.com