RxPY - 运算符

本章详细介绍了RxPY中的运算符。 这些运算符包括 −

  • 数学运算符
  • 转换运算符
  • 过滤运算符
  • 错误处理运算符
  • 公用运算符
  • 条件运算符
  • 创建运算符
  • 可连接的运算符
  • 组合运算符

Reactive (Rx) python 几乎有很多运算符,它们使 python 编码的生活变得轻松。 您可以一起使用这些多个运算符,例如,在处理字符串时,您可以使用 map、filter、merge 运算符。


与运算符一起工作

您可以使用 pipe() 方法与多个运算符一起工作。 此方法允许将多个运算符链接在一起。

这是一个使用运算符的工作示例 −

test = of(1,2,3) // an observable
subscriber = test.pipe(
   op1(),
   op2(),
   op3()
)

在上面的示例中,我们使用 of() 方法创建了一个可观察值,该方法接受值 1、2 和 3。现在,在这个可观察值上,您可以执行不同的操作,使用 pipe() 使用任意数量的运算符 方法如上图。 运算符的执行将在给定的可观察对象上按顺序进行。

要使用运算符,首先将其导入,如下所示 −

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

在上面的示例中,有一个数字列表,我们使用过滤运算符从中过滤掉偶数,然后使用归约运算符添加它。

输出

E:\pyrx>python testrx.py
Sum of Even numbers is 30

这是我们将要讨论的运算符列表 −

  • 创建可观察对象
  • 数学运算符
  • 转换运算符
  • 过滤运算符
  • 错误处理运算符
  • 公用运算符
  • 有条件的
  • 可连接
  • 组合运算符

创建可观察对象

以下是observables,我们将在Creation类中讨论

显示示例

可观察 描述
create 此方法用于创建一个可观察对象。
empty 这个 observable 不会输出任何东西,直接发出完整的状态。
never 此方法创建一个永远不会达到完整状态的可观察对象。
throw 此方法将创建一个会抛出错误的可观察对象。
from_ 此方法会将给定的数组或对象转换为可观察对象。
interval 该方法会给出超时后产生的一系列值。
just 此方法会将给定值转换为可观察值。
range 此方法将根据给定的输入给出一系列整数。
repeat_value 此方法将创建一个可观察对象,它将根据给定的计数重复给定的值。
start 此方法接受一个函数作为输入并返回一个可观察值,该可观察值将从输入函数返回值。
timer 此方法将在超时完成后按顺序发出值。

数学运算符

我们将在数学运算符类别中讨论的运算符如下: −

显示示例

运算符 说明
average 此运算符将根据给定的源可观察值计算平均值,并输出具有平均值的可观察值。
concat 此运算符将接受两个或多个可观察值,并给出一个包含序列中所有值的可观察值。
count

该运算符接收一个带有值的 Observable,并将其转换为一个具有单个值的 Observable。 计数函数将谓词函数作为可选参数。

函数是布尔类型的,只有满足条件才会给输出加值。

max 此运算符将从源可观察量中给出一个具有最大值的可观察量。
min 此运算符将从源可观察量中给出具有最小值的可观察量。
reduce 此运算符接受一个称为 accumulator 函数的函数,该函数用于来自源 observable 的值,并以 observable 的形式返回累积值,并将可选的种子值传递给 accumulator 函数。
sum 此运算符将返回一个可观察值,其中包含来自源可观察值的所有值的总和。

转换运算符

我们将在转换运算符类别中讨论的运算符如下所述 −

显示示例

运算符 类别
buffer 此运算符将从源可观察对象中收集所有值,并在满足给定边界条件后定期发出它们。
ground_by 此运算符将根据给定的 key_mapper 函数对来自源可观察对象的值进行分组。
map 此运算符将根据给定的 mapper_func 的输出将源可观察到的每个值更改为新值。
scan 该运算符将对来自源 observable 的值应用累加器函数,并返回具有新值的 observable。

过滤运算符

我们将在过滤运算符类别中讨论的运算符如下所示 −

显示示例

运算符 类别
debounce 此运算符将给出源可观察值的值,直到给定的时间跨度并忽略其余时间。
distinct 此运算符将提供所有不同于源可观察值的值。
element_at 此运算符将为给定的索引提供源可观察到的元素。
filter 此运算符将根据给定的谓词函数从源可观察对象中过滤值。
first 此运算符将给出源可观察对象的第一个元素。
ignore_elements 此运算符将忽略来自源可观察对象的所有值,并且仅执行对完成或错误回调函数的调用。
last 此运算符将给出源可观察对象的最后一个元素。
skip 此运算符将返回一个 Observable,该 Observable 将跳过第一次出现的作为输入的计数项。
skip_last 此运算符将返回一个 Observable,该 Observable 将跳过作为输入的最后一次出现的计数项。
take 此运算符将根据给定的计数按连续顺序给出源值列表。
take_last 此运算符将根据给定的计数从最后一个开始连续给出源值列表。

错误处理运算符

我们将在错误处理运算符类别中讨论的运算符是: -

显示示例

运算符 说明
catch 当出现异常时,此运算符将终止源可观察对象。
retry 当出现错误时,此运算符将在源可观察对象上重试,一旦重试计数完成,它将终止。

实用运算符

以下是我们将在实用运算符类别中讨论的运算符。

显示示例

运算符 说明
delay 此运算符将根据给定的时间或日期延迟源可观测发出。
materialize 此运算符会将来自源可观察值的值转换为以显式通知值形式发出的值。
time_interval 此运算符将给出来自源可观察值的值之间经过的时间。
timeout 此运算符将在经过的时间后给出来自源可观察对象的所有值,否则将触发错误。
timestamp 此运算符会将时间戳附加到源可观察对象的所有值。

条件运算符和布尔运算符

我们将在条件运算符和布尔运算符类别中讨论的运算符如下所示 −

显示示例

运算符 说明
all 此运算符将检查源可观察对象中的所有值是否都满足给定的条件。
contains 如果给定值存在并且它是源可观察值的值,此运算符将返回值为 true 或 false 的可观察值。
default_if_empty 如果源 observable 为空,此运算符将返回默认值。
sequence_equal 此运算符将比较两个 observable 序列或一个值数组,并返回值为 true 或 false 的 observable。
skip_until 此运算符将丢弃源可观察对象的值,直到第二个可观察对象发出值。
skip_while 此运算符将返回一个可观察值,其值来自满足传递条件的源可观察值。
take_until 此运算符将在第二个可观察对象发出值或终止后丢弃来自源可观察对象的值。
take_while 当条件失败时,此运算符将丢弃源可观察值中的值。

可连接运算符

我们将在可连接运算符类别中讨论的运算符是 −

显示示例

运算符 说明
publish 此方法会将可观察对象转换为可连接的可观察对象。
ref_count 此运算符将使可观察对象成为普通可观察对象。
replay 此方法的工作方式类似于 replaySubject。 此方法将返回相同的值,即使 observable 已经发出并且一些订阅者延迟订阅。

组合运算符

以下是我们将在组合运算符类别中讨论的运算符。

显示示例

运算符 说明
combine_latest 此运算符将为作为输入给定的可观察对象创建一个元组。
merge 此运算符将合并给定的可观察对象。
start_with 此运算符将接受给定值并在源可观察对象的开头添加返回完整序列。
zip 此运算符返回一个具有元组形式值的可观察值,该值是通过获取给定可观察值的第一个值等形成的。