Rxpy 简明教程
RxPY - Operators
本章详细介绍了 RxPY 中的运算符。这些运算符包括 −
-
Working with Operators
-
Mathematical operators
-
Transformation operators
-
Filtering operators
-
Error handling operators
-
Utility operators
-
Conditional operators
-
Creation operators
-
Connectable operators
-
Combining operators
Reactive (Rx) python 几乎有大量的运算符,使用 python 编程可以轻松处理。你可以一起使用这些多个运算符,例如,在处理字符串时,你可以使用 map、filter、merge 运算符。
Working with Operators
你可以使用 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)))
在上述示例中,有一个数字列表,我们使用一个 filter 运算符从中过滤偶数,然后使用一个 reduce 运算符添加它。
Output
E:\pyrx>python testrx.py
Sum of Even numbers is 30
以下是我们将要讨论的运算符列表 −
-
Creating Observables
-
Mathematical operators
-
Transformation operators
-
Filtering operators
-
Error handling operators
-
Utility operators
-
Conditional
-
Connectable
-
Combining operators
Creating Observables
以下是我们在“创建”类别中将讨论的可观察对象
Observable |
Description |
create |
此方法用于创建可观察对象。 |
empty |
此可观察对象不会输出任何内容,并直接发出完成状态。 |
never |
此方法创建一个永远不会达到完成状态的可观察对象。 |
throw |
此方法将创建将抛出错误的可观察对象。 |
from_ |
此方法将给定的数组或对象转换为可观察对象。 |
interval |
此方法将在超时后提供一系列生成的值。 |
just |
此方法将给定的值转换为可观察对象。 |
range |
这种方法将基于给定的输入给出一个范围的整数。 |
repeat_value |
此方法将创建一个可观察对象,该对象将根据给定的计数重复给定值。 |
start |
此方法采用一个函数作为输入,并返回一个可观察对象,该对象将返回输入函数中的值。 |
timer |
此方法将在超时完成之后按顺序发出值。 |
Mathematical operators
我们将在数学运算符类别中讨论的运算符如下:−
Operator |
Description |
average |
此运算符将计算给定源可观察对象的平均值,并输出一个具有平均值的可观察对象。 |
concat |
此运算符将采用两个或更多个可观察对象,并给出具有序列中所有值的单个可观察对象。 |
count |
此运算符采用具有值的 Observable,并将其转换为具有单个值的 Observable。计数函数采用谓词函数作为可选参数。该函数为布尔类型,仅当满足条件时才将值添加到输出。 |
max |
该运算符将给出源可观察对象中的最大值的可观察对象。 |
min |
该运算符将给出源可观察对象中的最小值的可观察对象。 |
reduce |
此运算符采用一个名为累加器函数的函数,该函数用于源可观察对象中的值,它以可观察对象的格式返回累加值,同时将可选的种子值传递给累加器函数。 |
sum |
此运算符将返回源可观察对象中所有值的总和的可观察对象。 |
Transformation operators
我们在变换运算符类别中要讨论的运算符如下所示 −
Operator |
Category |
buffer |
该运算符将收集源可观察对象中的所有值,并在给定的边界条件满足后以规则的时间间隔发出它们。 |
ground_by |
此运算符将根据给定的 key_mapper 函数对源可观察对象中的值进行分组。 |
map |
此运算符将根据给定映射函数的输出,将源可观察对象中的每个值更改为一个新值。 |
scan |
此运算符将累加器函数应用于来自源可观察对象的值,并返回具有新值的可观察对象。 |
Filtering operators
我们将讨论的过滤操作符类别中的操作符如下:
Operator |
Category |
debounce |
此操作符将给出来自源可观察对象的值,直到指定时间段为止,并忽略其余时间。 |
distinct |
此操作符将给出与源可观察对象不同的所有值。 |
element_at |
此操作符将根据给定的索引从源可观察对象提供一个元素。 |
filter |
此操作符将根据给定的谓词函数从源可观察对象筛选值。 |
first |
此操作符将给出源可观察对象的第一个元素。 |
ignore_elements |
此操作符将忽略来自源可观察对象的所有值,而仅执行对完成或错误回调函数的调用。 |
last |
此操作符将给出源可观察对象的最后一个元素。 |
skip |
此操作符将返回一个可观察对象,该对象将跳过作为输入获取的计数项的首次出现。 |
skip_last |
此操作符将返回一个可观察对象,该对象将跳过作为输入获取的计数项的最后一次出现。 |
take |
此操作符将根据给定的计数连续有序地给出一系列源值。 |
take_last |
此操作符将根据给定的计数从后往前连续有序地给出一系列源值。 |
Error handling operators
我们将讨论的错误处理操作符类别中的操作符包括:-
Operator |
Description |
catch |
当出现异常时,此操作符将终止源可观察对象。 |
retry |
当出现错误时,此操作符将在源可观察对象上重试,一旦重试次数完成,它将终止。 |
Utility operators
以下是我们将讨论的实用程序操作符类别中的操作符。
Operator |
Description |
delay |
该操作符将根据给定的时间或日期延迟源可观察的排放。 |
materialize |
该操作符将以显式通知值的形式转换来自源可观察的值。 |
time_interval |
该操作符将给出来自源可观察的值之间经过的时间。 |
timeout |
该操作符将在经过时间后给出来自源可观察的所有值,否则将触发错误。 |
timestamp |
该操作符将给源可观察的所有值附加一个时间戳。 |
Conditional and Boolean operators
我们将在条件和布尔操作符类别中讨论的操作符如下所列:
Operator |
Description |
all |
该操作符将检查源可观察的所有值是否满足给定的条件。 |
contains |
该操作符将返回一个可观察的 true 或 false 值,如果存在给定值并且它是源可观察的值。 |
default_if_empty |
如果源可观察为空,该操作符将返回一个默认值。 |
sequence_equal |
该操作符将比较两个序列的可观察或一个值数组,并返回一个具有值 true 或 false 的可观察。 |
skip_until |
该操作符将丢弃源可观察的值,直到第二个可观察发出一个值。 |
skip_while |
该操作符将返回一个具有符合通过条件的源可观察的值的可观察。 |
take_until |
该操作符将丢弃源可观察的值,直到第二个可观察发出一个值或终止。 |
take_while |
当条件失败时,该操作符将丢弃源可观察的值。 |
Connectable Operators
我们将在可连接运算符类别中讨论的操作符是:
Operator |
Description |
publish |
该方法将可观察转换为可连接可观察。 |
ref_count |
该运算符将使可观察成为一个正常的可观察。 |
replay |
此方法与 replaySubject 的工作方式类似。此方法将返回相同的值,即使 observable 已经播发,并且部分订阅者订阅较晚。 |