RxPY - 操作符
本章详细解释了 RxPY 中的操作符。这些操作符包括:
- 使用操作符
- 数学运算符
- 转换操作符
- 过滤操作符
- 错误处理操作符
- 实用程序操作符
- 条件操作符
- 创建操作符
- 可连接操作符
- 组合操作符
Reactive (Rx) Python 拥有大量的操作符,使 Python 编码更加轻松。例如,在处理字符串时,您可以将 map、filter、merge 等多个操作符组合使用。
使用操作符
您可以使用 pipe() 方法将多个操作符组合在一起。此方法允许将多个操作符链接在一起。
这是一个使用操作符的工作示例:
test = of(1,2,3) // an observable subscriber = test.pipe( op1(), op2(), op3() )
在上面的示例中,我们使用 of() 方法创建了一个 Observable,该方法接受值 1、2 和 3。现在,您可以使用任何数量的操作符(如上所示使用 pipe() 方法)对这个 Observable 执行不同的操作。操作符的执行将按顺序在给定的 Observable 上进行。
要使用操作符,首先按照如下所示导入它:
from rx import of, operators as op
这是一个工作示例:
testrx.py
from rx import of, operators as op
test = of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
sub1 = test.pipe(
op.filter(lambda s: s%2==0),
op.reduce(lambda acc, x: acc + x)
)
sub1.subscribe(lambda x: print("Sum of Even numbers is {0}".format(x)))
在上面的示例中,有一个数字列表,我们使用 filter 操作符过滤偶数,然后使用 reduce 操作符对其进行求和。
输出
E:\pyrx>python testrx.py Sum of Even numbers is 30
以下是我们即将讨论的操作符列表:
- 创建 Observables
- 数学运算符
- 转换操作符
- 过滤操作符
- 错误处理操作符
- 实用程序操作符
- 条件
- 可连接的
- 组合操作符
创建 Observables
以下是我们将在“创建”类别中讨论的 Observables:
| Observable | 描述 |
|---|---|
| create | 此方法用于创建一个 Observable。 |
| empty | 此 Observable 不会输出任何内容,并直接发出 complete 状态。 |
| never | 此方法创建一个永远不会到达 complete 状态的 Observable。 |
| throw | 此方法将创建一个会抛出错误的 Observable。 |
| from_ | 此方法将给定的数组或对象转换为 Observable。 |
| interval | 此方法将在超时后产生一系列值。 |
| just | 此方法将给定值转换为 Observable。 |
| range | 此方法将根据给定的输入生成一系列整数。 |
| repeat_value | 此方法将创建一个 Observable,该 Observable 将根据给定的计数重复给定的值。 |
| start | 此方法接受一个函数作为输入,并返回一个 Observable,该 Observable 将返回来自输入函数的值。 |
| timer | 此方法将在超时后按顺序发出值。 |
数学运算符
我们将在数学运算符类别中讨论的操作符如下:
| 操作符 | 描述 |
|---|---|
| average | 此操作符将计算给定源 Observable 的平均值,并输出一个包含平均值的 Observable。 |
| concat | 此操作符将接收两个或多个 Observable,并生成一个包含所有值的单个 Observable,这些值按顺序排列。 |
| count | 此操作符接收一个包含值的 Observable,并将其转换为一个包含单个值的 Observable。count 函数可选择接受谓词函数作为参数。 该函数的类型为布尔型,只有当它满足条件时才会将值添加到输出。 |
| max | 此操作符将返回一个包含源 Observable 中最大值的 Observable。 |
| min | 此操作符将返回一个包含源 Observable 中最小值的 Observable。 |
| reduce | 此操作符接受一个名为 accumulator 的函数,该函数用于来自源 Observable 的值,并以 Observable 的形式返回累加值,并可以选择将 seed 值传递给 accumulator 函数。 |
| sum | 此操作符将返回一个包含所有源 Observable 值之和的 Observable。 |
转换操作符
我们将在转换操作符类别中讨论的操作符如下:
| 操作符 | 类别 |
|---|---|
| buffer | 此操作符将收集来自源 Observable 的所有值,并在满足给定的边界条件后定期发出这些值。 |
| group_by | 此操作符将根据给定的 key_mapper 函数对来自源 Observable 的值进行分组。 |
| map | 此操作符将根据给定的 mapper_func 的输出将源 Observable 中的每个值更改为新值。 |
| scan | 此操作符将对来自源 Observable 的值应用累加器函数,并返回一个包含新值的新 Observable。 |
过滤操作符
我们将在过滤操作符类别中讨论的操作符如下:
| 操作符 | 类别 |
|---|---|
| debounce | 此操作符将返回来自源 Observable 的值,直到给定的时间跨度,并忽略其余时间。 |
| distinct | 此操作符将返回源 Observable 中所有不同的值。 |
| element_at | 此操作符将返回源 Observable 中给定索引的元素。 |
| filter | 此操作符将根据给定的谓词函数过滤源 Observable 中的值。 |
| first | 此操作符将返回源 Observable 的第一个元素。 |
| ignore_elements | 此操作符将忽略来自源 Observable 的所有值,仅执行对 complete 或 error 回调函数的调用。 |
| last | 此操作符将返回源 Observable 的最后一个元素。 |
| skip | 此操作符将返回一个 Observable,该 Observable 将跳过作为输入的 count 个项目的第一次出现。 |
| skip_last | 此操作符将返回一个 Observable,该 Observable 将跳过作为输入的 count 个项目的最后一次出现。 |
| take | 此操作符将根据给定的计数返回源值列表,这些值按连续顺序排列。 |
| take_last | 此操作符将根据给定的计数返回源值列表,这些值从最后按连续顺序排列。 |
错误处理操作符
我们将在错误处理操作符类别中讨论的操作符如下:
| 操作符 | 描述 |
|---|---|
| catch | 此操作符将在出现异常时终止源 Observable。 |
| retry | 此操作符将在发生错误时重试源 Observable,并在重试次数完成后终止。 |
实用程序操作符
以下是我们将在实用程序操作符类别中讨论的操作符。
| 操作符 | 描述 |
|---|---|
| delay | 此操作符将根据给定的时间或日期延迟源 Observable 的发射。 |
| materialize | 此操作符将使用显式通知值的形式转换来自源 Observable 的值。 |
| time_interval | 此操作符将返回来自源 Observable 的值之间经过的时间。 |
| timeout | 此操作符将在经过时间后返回来自源 Observable 的所有值,否则将触发错误。 |
| timestamp | 此操作符将时间戳附加到来自源 Observable 的所有值。 |
条件和布尔运算符
我们将在条件和布尔运算符类别中讨论的操作符如下:
| 操作符 | 描述 |
|---|---|
| all | 此操作符将检查来自源 Observable 的所有值是否都满足给定的条件。 |
| contains | 如果给定值存在且是源 Observable 的值,则此操作符将返回一个包含 true 或 false 值的 Observable。 |
| default_if_empty | 如果源 Observable 为空,则此操作符将返回默认值。 |
| sequence_equal | 此操作符将比较两个 Observable 序列或一个值数组,并返回一个包含 true 或 false 值的 Observable。 |
| skip_until | 此操作符将丢弃来自源 Observable 的值,直到第二个 Observable 发出一个值。 |
| skip_while | 此操作符将返回一个 Observable,该 Observable 包含满足传递条件的源 Observable 的值。 |
| take_until | 此操作符将在第二个 Observable 发出一个值或终止后丢弃来自源 Observable 的值。 |
| take_while | 此操作符在条件失败时将丢弃来自源 Observable 的值。 |
可连接的操作符
我们将在可连接的操作符类别中讨论的操作符如下:
| 操作符 | 描述 |
|---|---|
| publish | 此方法将 Observable 转换为可连接的 Observable。 |
| ref_count | 此操作符将 Observable 转换为普通的 Observable。 |
| replay | 此方法的工作方式类似于 replaySubject。即使 Observable 已经发出值并且一些订阅者延迟订阅,此方法也会返回相同的值。 |
组合操作符
以下是我们将在组合操作符类别中讨论的操作符。
| 操作符 | 描述 |
|---|---|
| combine_latest | 此操作符将为给定为输入的 Observable 创建一个元组。 |
| merge | 此操作符将合并给定的 Observables。 |
| start_with | 此操作符将接收给定的值,并将其添加到源 Observable 的开头,然后返回完整的序列。 |
| zip | 此操作符返回一个包含元组形式值的 Observable,该元组是通过获取给定 Observable 的第一个值等等形成的。 |
广告