Python 创建带有反馈的迭代器/生成器

2023-12-23

是否可以创建一个迭代器/生成器,它将根据某些值决定下一个值result在上一次迭代中?

i.e.

y = None
for x in some_iterator(ll, y):
  y = some_calculation_on(x)

我想要选择下一个的逻辑x依赖于计算结果,允许不同的结果使用不同的逻辑,就像搜索问题一样。

我也想保留下如何选择x和计算x尽可能分开。


您是否可以使用发送到发电机generator.send https://docs.python.org/3/reference/expressions.html#generator.send?所以,是的,您可以让生成器根据外界的反馈来改变其行为。来自文档:

generator.send(value)

恢复执行并将一个值“发送”到生成器函数中。 value 参数成为当前yield 表达式的结果。 这send()方法返回生成器生成的下一个值 [...]

Example

这是一个计数器,只有在被告知这样做时才会递增。

def conditionalCounter(start=0):
    while True:
        should_increment = yield start
        if should_increment:
            start += 1

Usage

由于使用 for 循环进行迭代不允许使用generator.send,你必须使用 while 循环。

import random

def some_calculation_on(value):
    return random.choice([True, False])

g = conditionalCounter()

last_value = next(g)

while last_value < 5:
    last_value = g.send(some_calculation_on(last_value))
    print(last_value)

Output

0
0
1
2
3
3
4
4
5

让它在 for 循环中工作

您可以通过制作一个 for 循环来完成上述工作YieldReceive class.

class YieldReceive:
    stop_iteration = object()

    def __init__(self, gen):
        self.gen = gen
        self.next = next(gen, self.stop_iteration)

    def __iter__(self):
        return self

    def __next__(self):
        if self.next is self.stop_iteration:
            raise StopIteration
        else:
            return self.next

    def send(self, value):
        try:
            self.next = self.gen.send(value)
        except StopIteration:
            self.next = self.stop_iteration

Usage

it = YieldReceive(...)
for x in it:
    # Do stuff
    it.send(some_result)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 创建带有反馈的迭代器/生成器 的相关文章

  • 下载 PyQt6 的 Qt Designer 并使用 pyuic6 将 .ui 文件转换为 .py 文件

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar

随机推荐

  • 检测给定文件是否是图像以及java中特定类型的有效图像

    我需要从用户输入文件中获取该文件应该只是指定类型的图像 例如 仅有的JPEGs 其他文件必须被拒绝 所以我对文件实施了简单的基本检查 fileName toLowerCase endsWith jpg fileName toLowerCas
  • 对数据框列进行排序/对齐,以便行字符串值与主列表列匹配,如果列中不匹配则打印 0

    我想根据第一列 MASTER 中的字符串主列表对数据帧 3106 行 x 24 列 进行排序 以便数据帧的每一行中的字符串在存在匹配且存在时对齐不匹配则为该单元格打印 0 主列表包含任何列中的每个可能的字符串 但并非每个字符串都会出现在每列
  • 从表格上清除物体,何时何地?

    我有一个简单的 Windows 窗体应用程序 在表单上 我有一个自定义类 它有自己的 Dispose 方法 所以问题是我什么时候应该调用这个 FormClosed 事件 即 Form1 FormClosed 是否是执行此操作的正确位置 或者
  • .NET 的 StringBuilder 是线程安全的吗

    MSDN 文档的常规 线程安全 部分StringBuilder指出 不保证任何实例成员都是线程安全的 但这个语句感觉就像是为框架中的几乎每个类复制并粘贴了 http msdn microsoft com en us library syst
  • CombinedDomainXYPlot 不重新缩放域轴

    当我从使用 CombinedDomainXYPlot 的图表中隐藏系列数时 所有范围轴都会很好地自动重新缩放 但是 域轴不会重新缩放 有没有办法手动刷新缩放 或者我可能缺少一个设置来启用此设置中域轴的自动缩放 CombinedDomainX
  • JAX-RS和自定义授权

    我正在尝试保护 JAX RS 端点 目前正在尝试弄清楚身份验证和授权是如何工作的 大多数示例都非常简单 因为它们仅通过 web xml 搭载 Java EE 应用服务器角色 我想知道如何使用 Java EE AS 角色之外的其他角色 例如
  • Couchbase Lite 2 + JsonConvert

    以下代码示例将一个简单的对象写入 couchbase lite 版本 2 数据库 然后读取所有对象 这个你可以在官方文档中找到here https developer couchbase com documentation mobile 2
  • 在 Chrome 扩展中运行喊播广播

    我想为我的网络shoutcast网络广播电台创建一个chrome扩展 我设法使这一切正常工作 除了每当我点击弹出窗口时 它就会关闭 并且流也会随之停止 读了一点之后 我发现我需要创建一个后台页面 这将使播放器在后台运行 这就是我迷失和困惑的
  • 如何强制浏览器不存储 HTML 表单字段数据?

    在 HTML 表单中输入内容时 Firefox 或 Internet Explorer 等浏览器会存储这些值 有时会悄悄存储 因此 当输入另一个网络表单时 浏览器会智能地建议相同的信息 显示下拉列表的另一种方法是双击空文本框 在电子商务网站
  • Python读取设备管理器信息

    我只需要使用 python 2 7 脚本读取设备管理器中列出的所有信息 特别是 IDE ATA ATAPI 控制器 子类别下的信息 需要检测 SATA 驱动器是否处于 AHCI 或 IDE 模式 一种简单的方法 在 Windows 上 是使
  • multer、multiparty 和 connect-multiparty + Nodejs 之间的区别

    我是 Node 世界的新手 用例 有一个在 Angular 前端上传 XLS 文件的简单场景 在 Node 上处理它们 进行一些操作 然后将 JSON 保存到 蒙戈数据库 从 Angular 收到文件后 我正在搜索在 Node 上解析 处理
  • ARKit Stereo – 是否可以同时运行两个 ARSCNView?

    我正在考虑对现有的 AR 应用程序进行一些修改 我想拆分视图并添加内部 2ARSCNView这样用户就可以使用VR卡盒并获得不同的体验 但Xcode总是返回给我 Session 0x102617d10 did fail with error
  • 如何在 UITextView 中显示可点击的链接

    我正在尝试在 UITextview 中显示带有可单击链接的属性字符串 我创建了一个简单的测试项目来看看哪里出了问题 但仍然无法弄清楚 我尝试启用用户交互并设置 shouldInteractWithURLs 委托方法 但它仍然不起作用 这是我
  • 为什么 CoreNLP ner tagger 和 ner tagger 将分开的数字连接在一起?

    这是代码片段 In 390 t Out 390 my phone number is 1111 1111 1111 In 391 ner tagger tag t Out 391 my O phone O number O is O 111
  • 反转数组顺序

    我正在尝试反转 java 中数组的顺序 在 O n 内使用最少的内存来完成此操作的最有效方法是什么 不需要用代码回答 伪代码就可以了 这是我的思考过程 create a new temp array I think this is a wa
  • jquery 与更新面板

    我在使用 jquery 上下文菜单和更新面板时遇到问题 我正在使用 htmlTextWriter 在 Customtextbox 控件的 RenderBeginTag 中编写上下文菜单的 javascript 一切正常 我可以右键单击每个文
  • 在 TRichEdit 中加载包含表格但没有表格边框的 RTF 文件

    我有一个 RTF 文件 正在将其加载到 TRichEdit 控件中 我面临的唯一问题是 RTF 文件中有表格 加载相同的文件会显示表格边框 但是当我在 MS Word 中加载相同的 RTF 时 它不显示任何边框 客户端想要相同的行为 有没有
  • raster可以创建不同模式的多层对象吗?

    Can a raster对象 R 中 具有不同模式 数据类型 的层 从表面上看 我们似乎总是被迫选择一种类型 library raster create a SpatialPixelsDataFrame with trivially two
  • 如何在Matlab中删除wav文件的标题

    我需要删除波形文件的前 1024 个字节 我尝试这样做 但我得到了损坏 扭曲的 wavfile wavFile fopen fullFileName r Open file for reading fseek wavFile 1024 1
  • Python 创建带有反馈的迭代器/生成器

    是否可以创建一个迭代器 生成器 它将根据某些值决定下一个值result在上一次迭代中 i e y None for x in some iterator ll y y some calculation on x 我想要选择下一个的逻辑x依赖