RxPY - 操作符
-
简述
本章详细解释了 RxPY 中的操作符。这些操作符包括 -- 与操作符工作
- 数学运算符
- 转换算子
- 过滤运算符
- 错误处理运算符
- 公用操作符
- 条件运算符
- 创建运算符
- 可连接的操作符
- 组合运算符
反应式(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。现在,在这个 observable 上,您可以使用任意数量的操作符使用 pipe() 方法执行不同的操作,如图所示更多。运算符的执行将在给定的 observable 上按顺序进行。要与操作符合作,首先导入它,如下所示 -from rx import of, operators as op
这是一个工作示例 -testrx.pyfrom 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)))
在上面的示例中,有一个数字列表,我们使用过滤运算符过滤偶数,然后使用 reduce 运算符将其添加。OutputE:\pyrx>python testrx.py Sum of Even numbers is 30
这是我们将要讨论的运算符列表 -- 创建 Observables
- 数学运算符
- 转换算子
- 过滤运算符
- 错误处理运算符
- 公用操作符
- 有条件的
- 可连接
- 组合运算符
-
创建 Observables
以下是 observables,我们将在 Creation 类别中讨论可观察的 描述 create 此方法用于创建可观察对象。 empty 这个 observable 不会输出任何东西,直接发出完整的状态。 never 此方法创建一个永远不会达到完整状态的可观察对象。 throw 此方法将创建一个会引发错误的 observable。 from_ 此方法会将给定的数组或对象转换为可观察对象。 interval 此方法将给出超时后产生的一系列值。 just 此方法会将给定值转换为可观察值。 range 此方法将根据给定的输入给出一个整数范围。 repeat_value 此方法将创建一个 observable,它将根据给定的计数重复给定的值。 start 此方法接受一个函数作为输入,并返回一个可观察对象,该可观察对象将从输入函数返回值。 timer 此方法将在超时完成后按顺序发出值。 -
数学运算符
我们将在数学运算符类别中讨论的运算符如下: -操作员 描述 average 该运算符将从给定的源 observable 计算平均值,并输出一个具有平均值的 observable。 concat 该运算符将接收两个或多个可观察对象,并给定一个具有序列中所有值的可观察对象。 count 这个操作符接收一个带有值的 Observable 并将它转换成一个只有一个值的 Observable。count 函数将谓词函数作为可选参数。该函数是布尔类型,只有在满足条件时才会向输出添加值。max 该运算符将给出一个来自源 observable 的具有最大值的 observable。 min 该运算符将给出一个来自源 observable 的具有最小值的 observable。 reduce 该运算符接受一个称为 accumulator 函数的函数,该函数用于来自源 observable 的值,它以 observable 的形式返回累积值,并将可选的种子值传递给 accumulator 函数。 sum 该运算符将返回一个包含源 observable 中所有值的总和的 observable。 -
转换算子
我们将在转换运算符类别中讨论的运算符如下所述 -操作员 类别 buffer 该运算符将从源 observable 收集所有值,并在满足给定边界条件后定期发出它们。 ground_by 该运算符将根据给定的 key_mapper 函数对来自源 observable 的值进行分组。 map 该运算符将根据给定的 mapper_func 的输出将源 observable 中的每个值更改为新值。 scan 该运算符将对来自源 observable 的值应用一个累加器函数,并返回一个带有新值的 observable。 -
过滤运算符
我们将在过滤运算符类别中讨论的运算符如下 -操作员 类别 debounce 该运算符将给出源 observable 的值,直到给定的时间跨度,并忽略其余时间过去。 distinct 该运算符将给出与源 observable 不同的所有值。 element_at 该运算符将为给定的索引从源 observable 中给出一个元素。 filter 该运算符将根据给定的谓词函数过滤来自可观察源的值。 first 该运算符将给出源 observable 中的第一个元素。 ignore_elements 该运算符将忽略源 observable 中的所有值,仅执行对完成或错误回调函数的调用。 last 该运算符将给出源 observable 中的最后一个元素。 skip 该运算符将返回一个 observable,它将跳过作为输入的计数项的第一次出现。 skip_last 该运算符将返回一个 observable,该 observable 将跳过最后一次出现的计数项作为输入。 take 该运算符将根据给定的计数以连续顺序给出源值列表。 take_last 该运算符将根据给定的计数从最后一个连续顺序给出源值列表。 -
错误处理运算符
我们将在错误处理运算符类别中讨论的运算符是:-操作员 描述 catch 当出现异常时,此运算符将终止源 observable。 retry 当出现错误时,此运算符将重试源 observable,一旦重试计数完成,它将终止。 -
公用操作符
以下是我们将在 Utility 运算符类别中讨论的运算符。操作员 描述 delay 该操作员将根据给定的时间或日期延迟源可观察发射。 materialize 该操作符会将源 observable 中的值转换为以显式通知值的形式发出的值。 time_interval 该运算符将给出源 observable 的值之间经过的时间。 timeout 该运算符将在经过的时间后提供来自可观察源的所有值,否则将触发错误。 timestamp 该操作符将为源 observable 中的所有值附加时间戳。 -
条件和布尔运算符
我们将在条件和布尔运算符类别中讨论的运算符如下所示 -操作员 描述 all 该运算符将检查源 observable 中的所有值是否满足给定条件。 contains 如果给定值存在并且它是源 observable 的值,则此运算符将返回值为 true 或 false 的 observable。 default_if_empty 如果源 observable 为空,此运算符将返回默认值。 sequence_equal 该运算符将比较两个可观察对象序列或一个值数组,并返回一个值为真或假的可观察对象。 skip_until 该运算符将丢弃源 observable 中的值,直到第二个 observable 发出值。 skip_while 该操作符将返回一个 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 该运算符返回一个带有元组形式的值的可观察对象,该形式是通过获取给定可观察对象的第一个值等形成的。