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的值。现在,在这个可观察变量上,你可以使用任意数量的操作符,如上图所示,执行不同的操作,使用管道()方法。操作符的执行将在给定的可观察对象上按顺序进行。
要使用操作符,首先要导入它,如下图所示
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
下面是我们将要讨论的操作符的列表
- 创建可观察变量
- 数学运算符
- 变换运算符
- 筛选运算符
- 错误处理运算符
- 实用操作符
- 条件性
- 可连接
- 组合运算符
创建可观察变量
以下是我们将在创建类别中讨论的观察变量
可观察变量 | 描述 |
---|---|
create | 该方法用于创建一个可观察变量。 |
empty | 该观察变量不会输出任何东西,直接发出完整的状态。 |
never | 此方法创建一个永远不会达到完整状态的观察器。 |
throw | 此方法将创建一个将抛出一个错误的可观察变量。 |
from_ | 这个方法将把给定的数组或对象转换成一个可观察变量。 |
interval | 这个方法将给出一个超时后产生的一系列数值。 |
just | 这个方法将把给定的值转换成一个可观测值。 |
range | 该方法将根据给定的输入值给出一个整数范围。 |
repeat_value | 这个方法将创建一个可观察变量,它将按照给定的计数重复给定的值。 |
start | 这个方法接收一个函数作为输入,并返回一个将从输入函数返回值的可观察变量。 |
timer | 这个方法将在超时完成后依次发出数值。 |
数学运算符
我们将在数学运算符类别中讨论的运算符如下:
运算符 | 说明 |
---|---|
average | 该操作符将从给定的源观测值中计算出平均值,并输出一个具有平均值的观测值。 |
concat | 该操作符将接收两个或多个观测值,并给出一个具有序列中所有值的单一观测值。 |
count | 这个运算符将接收一个带有数值的Observable,并将其转换为一个将具有单一数值的Observable。count函数接收谓词函数作为一个可选的参数。 该函数是布尔类型的,只有当它满足条件时才会向输出添加值。 |
max | 这个操作符将给出一个具有源观察变量的最大值的观察变量。 |
min | 这个操作符将从源观察变量中给出一个具有最小值的观察变量。 |
reduce | 这个操作符接收一个被称为累加器的函数,该函数用于来自源观测器的值,它以观测器的形式返回累加的值,并有一个可选的种子值传递给累加器函数。 |
sum | 这个操作符将返回一个具有来自源观测变量的所有值之和的观测变量。 |
转换操作符
我们将在转换操作符类别中讨论的操作符如下-
运营商 | 类别 |
---|---|
buffer | 这个操作符将收集源观测点的所有值,一旦满足给定的边界条件,就会以固定的时间间隔发射这些值。 |
ground_by | 这个操作符将根据给定的key_mapper函数,对来自源观测点的值进行分组。 |
map | 这个操作符将根据给定的mapper_func的输出,把来自源观测点的每个值变成一个新的值。 |
scan | 这个操作符将对来自源观测器的值应用一个累加器函数,并返回一个带有新值的观测器。 |
筛选运算符
我们要讨论的过滤运算符类别如下-
操作符 | 类别 |
---|---|
debounce | 这个运算符将给出源观测点的值,直到给出的时间范围,并忽略其余的时间流逝。 |
distinct | 这个操作符将给出所有与源观测点不同的值。 |
element_at | 这个操作符将给出源观测点的一个元素,并给出索引。 |
filter | 这个操作符将根据给定的谓词函数从源观测器中过滤值。 |
first | 这个操作符将给出源观测点中的第一个元素。 |
ignore_elements | 这个操作符将忽略来自源观测器的所有值,只执行对完整或错误回调函数的调用。 |
last | 这个操作符将给出源观测器中的最后一个元素。 |
skip | 这个操作符将给出一个可观察变量,它将跳过作为输入的计数项的第一次出现。 |
skip_last | 这个操作符将返回一个可观察变量,它将跳过作为输入的计数项的最后出现的部分。 |
take | 这个操作符将根据给出的计数,以连续的顺序给出一个源值的列表。 |
take_last | 这个操作符将根据给定的计数,从最后一个开始,连续给出一个源值的列表。 |
错误处理运算符
我们将在错误处理运算符类别中讨论的运算符是:-
操作符 | 说明 |
---|---|
catch | 当出现异常时,该操作符将终止源观察程序。 |
retry | 当出现错误时,该操作符将在源观测器上重试,一旦重试次数完成,它将终止。 |
实用操作符
下面是我们要讨论的公用操作符类别中的操作符。
操作符 | 描述 |
---|---|
delay | 这个操作符将按照给定的时间或日期延迟源的可观测排放。 |
materialize | 该操作符将把源观测点的值与以明确通知值形式发射的值进行转换。 |
time_interval | 这个操作符将给出来自源观测器的值之间所经过的时间。 |
timeout | 这个操作符将在经过的时间后给出所有来自源观测点的值,否则将触发一个错误。 |
timestamp | 这个操作符将为源观测点的所有值附加一个时间戳。 |
条件性和布尔运算符
我们将在条件和布尔运算符类别中讨论的运算符如下-
运营商 | 叙述 |
---|---|
all | 这个操作符将检查源观测点的所有值是否满足给定的条件。 |
contains | 如果给定的值存在,并且它是源观测器的值,那么这个操作符将返回一个观测器,其值为true或false。 |
default_if_empty | 如果源观测器为空,这个操作符将返回一个默认值。 |
sequence_equal | 这个操作符将比较两个观察变量的序列或一个值的数组,并返回一个值为真或假的观察变量。 |
skip_until | 这个操作符将丢弃源观察变量的值,直到第二个观察变量发出一个值。 |
skip_while | 这个操作符将从源观测器中返回一个带有满足所传递条件的值的观测器。 |
take_until | 这个操作符将在第二个观测器发出一个值或被终止后从源观测器中丢弃值。 |
take_while | 这个操作符将在条件失败时丢弃源观测器中的值。 |
可连接的操作符
我们要讨论的可连接运营商类别中的运营商是 −
操作符 | 说明 |
---|---|
publish | 这个方法将把可观察对象转换成可连接的观察对象。 |
ref_count | 这个操作符将使观测器成为一个正常的观测器。 |
replay | 这个方法的作用与replaySubject类似。这个方法将返回相同的值,即使观测器已经发射了,并且一些订阅者迟迟没有订阅。 |
组合运算符
以下是我们将在组合操作符类别中讨论的操作符。
操作符 | 说明 |
---|---|
combine_latest | 这个操作符将为作为输入的观察变量创建一个元组。 |
merge | 该操作符将合并给定的观察变量。 |
start_with | 这个操作符将接收给定的值,并在源观测变量的开始处添加,然后返回完整的序列。 |
zip | 这个操作符返回一个具有元组形式值的可观察变量,元组是由给定的可观察变量的第一个值形成的,以此类推。 |