【Python】之 RxPy 操作符总结

2023-11-03

创建类操作符

  • crate:从头创建一个 Observable,在 observer 方法中检查订阅状态,以便及时停止发射数据或者运算
  • defer:只有当订阅者订阅才创建 Observable,为每个订阅创建一个新的 Observable
  • from_:把一些对象或数据结构转换为 Observable
  • interval:创建一个按照给定的时间间隔发射从 0 开始的整数序列的 Observable
  • timer:创建一个在给定的延时之后发射单个数据项的 Observable
  • just:将一个对象或对象集转换为发射这个或这些对象的 Observable
  • range: 创建一个发射指定范围的整数序列的 Observable
  • repeat:创建一个重复发射特定项或序列的 Observable
  • start:创建一个发射函数返回值的 Observable
  • empty/never/throw:创建一个什么都不做直接通知完成的 Observable、创建一个什么都不做直接通知错误的 Observable,创建一个什么都不做的 Observable

转换类操作符

  • buffer: 缓存,可以简单的理解为缓存,它定期从 Observable 收集数据到一个集合,然后把这些数据集合打包发射,而不是一次发射一个
  • flat_map:扁平映射,将 Observable 发射的数据变换为 Observables 集合,然后将这些 Observable 发射的数据平坦化的放进一个单独的 Observable,可以认为是一个将嵌套的数据结构展开的过程
  • group_by:分组,将原来的 Observable 分拆为 Observable 集合,将原始 Observable 发射的数据按 Key 分组,每一个 Observable 发射一组不同的数据
  • map:映射,通过对序列的每一项都应用一个函数变换 Observable 发射的数据,实质是对序列中的每一项执行一个函数,函数的参数就是这个数据项
  • scan:扫描,对 Observable 发射的每一项数据应用一个函数,然后按顺序依次发射这些值
  • window:窗口,定期将来自 Observable 的数据分拆成一些 Observable 窗口,然后发射这些窗口,而不是每次发射一项。类似于 Buffer,但 Buffer 发射的是数据,Window 发射的是 Observable,每一个 Observable 发射原始 Observable 的数据的一个子集

注意:

  • flat_map 和 map 是两个非常重要的操作符,map 的操作很简单,就是传入一个函数,这个函数会将数据进行转换,一个输入对应一个输出
  • flat_map 和 map 不同,其返回值是一个 Observable,一个输入对应多个输出
  • 当转换过程是同步过程时,使用 map,当转换过程是异步过程时使用 flat_map
  • Group by 在工作中操作数据库的时候经常用到,就是按某个字段分组,在这里也是相同的意思,会按传递的函数生成的key来分组,注意这里的返回是一个分组的Observable,不能直接订阅,需要再做一次处理

过滤类操作符

过滤用于从 Observable 发射的数据中进行选择,其常见操作符如下:

  • debounce:—只有在空闲了一段时间后才发射数据,通俗的说,就是如果一段时间没有操作,就执行一次操作
  • distinct:去重,过滤重复数据
  • element_at:取值,发射某一项数据
  • ignore_elements:丢弃所有数据,只发射错误或正常终止的通知
  • filter:过滤,仅发射 Observable 中通过检测的项
  • first:首项,只发射第一项(或者满足某个条件的第一项)数据
  • last:末项,只发射最后一项数据
  • sample:取样,定期发射 Observable 最近的数据
  • skip:跳过开始的 N 项数据
  • skip_last:跳过最后的 N 项数据
  • take:从发射的第一项数据开始,只发射后续的 N 项数据
  • take_last:只发射最后的N项数据

其中最常用的是 filter,filter 就是过滤,对于数据流,仅发射通过检测的项,有点像 SQL 中的 where 条件,只是这里的条件是一个函数,他会遍历一个个项,并执行这个函数,看是否满足条件,对于 满足条件的才会给到输出流。


合并类操作符

合并操作符或者叫组合操作符,其常见如下:

  • concat:顺序连接多个 Observable
  • merge:将多个 Observable 合并为一个。不同于concat,merge不是按照添加顺序连接,而是按照时间线来连接
  • zip:使用一个函数组合多个 Observable 发射的数据集合,然后再发射这个结果。如果多个 Observable 发射的数据量不一样,则以最少的Observable 为标准进行压合
  • start_with:在数据序列的开头增加一项数据。start_with 的内部也是调用了 concat
  • combine_latest:当两个 Observables 中的任何一个发射了一个数据时,通过一个指定的函数组合每个 Observable 发射的最新数据(一共两个数据),然后发射这个函数的结果
  • switch_latest:将 Observable 发射出来的多个 Observables 转换为仅包括最近发射单个项的 Observable
  • and/then/when:通过模式(And 条件)和计划(Then 次序)组合两个或多个 Observable 发射的数据集

这里需要注意的是:

  • combine_latest类似于 zip,但不同的是,zip 只有在每个Observable都发射了数据才工作,而 combine_latest 任何一个发射了数据都可以工作,每次与另一个 Observable 最近的数据压合
  • concat 和 merge 都是合并流,区别在于一个是连接,一个是合并,连接的时候是一个流接另一个流,合并的流是无序的,原来两个流的元素交错,当其中一个结束时,另一个就算是没有结束整个合并过程也会中断

其它

  • all:判断所有的数据项是否满足某个条件
  • amb:给定多个 Observable,只让第一个发射数据的 Observable 发射全部数据,其他 Observable 将会被忽略
  • contains:判断在发射的所有数据项中是否包含指定的数据
  • default_if_empty:如果原始 Observable 正常终止后仍然没有发射任何数据,就发射一个默认值
  • sequence_equal:判断两个 Observable 的数据序列是否相同
  • skip_until:丢弃 Observable 发射的数据,直到指定的 Observable 发送数据(丢弃条件数据)
  • skip_while:丢弃 Observable 发射的数据,直到一个指定的条件不成立(不丢弃条件数据)
  • take_until:当发射的数据满足某个条件后(包含该数据),或者第二个 Observable 发送完毕,终止第一个 Observable 发送数据
  • take_while:当发射的数据满足某个条件时(不包含该数据),Observable 终止发送数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】之 RxPy 操作符总结 的相关文章

随机推荐

  • MyBatis使用association实现一对一级联查询的几种案例

    我们平日经常会遇到需要级联查询的场景 这里通过案例给大家展示实现过程 我们要查询的用户信息里面有个角色信息 一个用户对应一个角色 我们现在要求查出用户信息的同时 关联查出用户的角色信息 那么这个时候我们可以通过级联属性的方式 将角色中的数据
  • Mybatis拦截器

    MyBatis介绍 MyBatis本是apache的一个开源项目iBatis 2010年这个项目由apache software foundation 迁移到了google code 并且改名为MyBatis 它支持普通 SQL查询 存储过
  • uniapp、vue返回上一个页面并刷新(调用上一个页面的方法)

    在写微信小程序时有个功能有点问题 需求是 在当前页面 A页面 查看列表 在A页面点击发布跳转到表单页 B页面 B页面提交成功返回上一页A 要判断如果发布成功 返回到A页面得拿到最新数据 相当于要监听返回到A页面时得刷新数据了 方法一 使用o
  • 蓝桥杯:国二选手经验贴 附蓝桥杯历年真题

    相信能看到这篇文章的你 一定是有想过参赛了 那么恭喜你呀 看到一篇宝藏参赛指南 楼主将结合自己的参赛经历 手把手教你拿到省一进国赛嗷 文章结尾有历年真题及VIP试题链接 建议收藏 楼主是参加了2022年的蓝桥杯算法竞赛Python大学A组
  • latex教程——读书笔记整理(二)——文本排版

    文本排版 目录 文本排版 断行和分页 对齐段落 断词 内置字符串 特殊字符和符号 引号 破折号和连字号 波浪号 度的符号 省略号 连字 注音符号和特殊字符 标题 章 节 交叉引用 脚注 强调 环境 Itemize Enumerate 和 D
  • Java 详解(JVM) 垃圾回收机制原理

    一 什么是垃圾 二 如何判断垃圾 三 垃圾回收 一 什么是垃圾 首先我们要搞懂什么是垃圾 在 JVM 的眼中 垃圾就是指那些在堆中存在的 已经 死亡 的对象 而对于 死亡 的定义 我们可以简单的将其理解为 不可能再被任何途径使用的对象 通俗
  • Java - Buffered流拷贝文件

    BufferedInputStream 向另一个输入流添加功能 即缓冲输入并支持标记和重置方法的能力 创建 BufferedInputStream 时 会创建一个内部缓冲区数组 当流中的字节被读取或跳过时 内部缓冲区会根据需要从包含的输入流
  • curl错误码大全curl_errno

    CURLE UNSUPPORTED PROTOCOL 1 你的URL传递给libcurl的使用协议 这libcurl的不支持 支持可能是你没有使用一个编译时的选项 它可以是一个拼写错的协议字符串 或者只是一个协议的libcurl没有代码 C
  • Unity3D中Animation的常见属性及方法

    Unity3D中Animation的常见属性及方法如下 Animation Play播放 function Play mode PlayMode PlayMode StopSameLayer bool function Play anima
  • sudo apt-get update 命令出现没有Release文件问题解决

    在对我的linux系统更新软件源时 出现了这个问题 sudo apt get update E 仓库 http ppa launchpad net leaeasy dde ubuntu focal Release 没有 Release 文件
  • 百度点石-人工智能农作物识别比赛总结

    初赛排名第8 虽然成绩较差 但觉得参与其中 收获颇丰 借此分享一下 欢迎交流 1 背景介绍 本次竞赛目的是对某一时刻一张遥感卫星多光谱影像进行分类 需识别为4种类别 玉米 大豆 水稻和其他 背景 提供的多光谱影像 如图1所示 1 2 3波段
  • web端常见导航设计

    一 导航的定义 导航作为网站或者平台的骨架 是产品设计中不容忽视的一环导航是内容或者功能的定位 导向与通道 二 导航分类 遵循导航层级结构 包括全局导航和局部导航 全局导航往往指页眉和页脚 存在于网站的大部分页面 便于用户随时跳转 局部导航
  • node.js 服务器获取客户端ip的方法

    获取发送AJAX请求的客户端ip server http createServer function req res var ip req headers x forwarded for req ip req connection remo
  • 6、PXE安装ESXI6.0

    1 安装PXE环境涉及软件 yum y install dhcp httpd tftp server 2 配置DHCP vim etc dhcp dhcpd conf allow booting allow bootp ignore cli
  • MYSQL 数据库各类属性说明 (持续更新)

    数据库的学习 一 使用数据库的原因 二 安装与使用 安装 基础查询 1 创建数据库 2 删除数据库 3 选择数据库 4 创建表格 5 删除表格 6 插入数据 7 更新数据 8 删除数据 9 选择数据 10 排序数据 11 连接表格 12 聚
  • 大数据毕设选题 - 旅游数据分析可视化系统(python 大数据)

    文章目录 0 前言 1 课题背景 2 数据处理 3 数据可视化工具 3 1 django框架介绍 3 2 ECharts 4 Django使用echarts进行可视化展示 mysql数据库 4 1 修改setting py连接mysql数据
  • fota 差分包_艾拉比FOTA差分升级助力电力厂商加速软件迭代

    电力载波作为电力系统特有的通信方式 广泛应用在远程抄表领域 但是由于电力载波拥有可靠性差 通讯不稳定的缺点 使得设备的升级成功率比较低 本期的小课堂 艾拉比将系统介绍下我们提供的FOTA差分升级是如何帮助电力厂商解决升级效率低 升级时间长
  • idea部署自定义maven不生效,解决方案

    问题 已经在File gt settings gt maven gt user settings file中进行了自定义的settings xml配置 不论下载什么jar包 还是去默认的中央仓库下载即https repo maven apa
  • “老伙伴”梁思成

    时间 2012 06 07 22 36来源 光明日报 作者 黄汇 清芬挺秀 华夏增辉 清华大学百年校庆在即 众多学子重聚清华园 回忆当年的生活 回忆老师们 本文是清华大学建筑系1961届毕业生黄汇对的回忆 文章既有浓厚的师生情谊 又展现了梁
  • 【Python】之 RxPy 操作符总结

    创建类操作符 crate 从头创建一个 Observable 在 observer 方法中检查订阅状态 以便及时停止发射数据或者运算 defer 只有当订阅者订阅才创建 Observable 为每个订阅创建一个新的 Observable f