RxPY 操作符
本章详细介绍了RxPY中的操作符。这些操作符包括:
- 操作符使用
- 数学运算操作符
- 转换操作符
- 筛选操作符
- 错误处理操作符
- 实用程序操作符
- 条件操作符
- 创建操作符
- 可连接操作符
- 组合操作符
反应式(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)))
在上面的示例中,有一个数字列表,我们使用过滤器运算符过滤出偶数,然后使用reduce运算符将其相加。
输出
E:\pyrx>python testrx.py
Sum of Even numbers is 30
这是一个要讨论的操作符列表:
- 创建Observables
- 数学运算符
- 转换运算符
- 筛选运算符
- 错误处理运算符
- 实用程序运算符
- 条件运算符
- 可连接运算符
- 组合运算符
创建Observables
以下是我们要在创建类别中讨论的Observables:
展示示例
Observable | 描述 |
---|---|
create | 此方法用于创建一个可观察对象。 |
empty | 此可观察对象不会输出任何内容,直接发出完成状态。 |
never | 此方法创建一个永远不会达到完成状态的可观察对象。 |
throw | 此方法将创建一个会抛出错误的可观察对象。 |
from_ | 此方法将给定的数组或对象转换为可观察对象。 |
interval | 此方法将在延迟后产生一系列值。 |
just | 此方法将给定的值转换为可观察对象。 |
range | 此方法根据给定的输入给出一系列整数。 |
repeat_value | 此方法将创建一个可观察对象,根据给定的次数重复给定的值。 |
start | 此方法接受一个函数作为输入,并返回一个可观察对象,该对象将从输入函数返回值。 |
timer | 此方法在超时完成后按顺序发出值。 |
数学运算符
我们将要讨论的数学运算符类别如下:−
展示示例
运算符 | 描述 |
---|---|
average | 这个运算符将计算给定源可观测对象的平均值,并输出一个包含平均值的可观测对象。 |
concat | 这个运算符将接受两个或多个可观测对象,并给出一个包含所有值的序列的单个可观测对象。 |
count | 这个运算符接受一个带值的可观测对象,并将其转换为一个只有一个值的可观测对象。count函数接受一个谓词函数作为可选参数。 该函数的类型为布尔型,仅当值满足条件时才将其添加到输出中。 |
max | 这个运算符将从源可观测对象中给出具有最大值的可观测对象。 |
min | 这个运算符将从源可观测对象中给出具有最小值的可观测对象。 |
reduce | 这个运算符接受一个称为累加器函数的函数,该函数用于处理来自源可观测对象的值,并返回一个以可选的种子值传递给累加器函数的形式累积的值的可观测对象。 |
sum | 这个运算符将返回一个包含源可观测对象中所有值的和的可观测对象。 |
转化运算符
我们将要讨论的转化运算符类别中包括以下操作符:
显示示例
运算符 | 类别 |
---|---|
buffer | 这个运算符将从源可观察对象中收集所有的值,并在满足给定的边界条件后以规律的间隔发出它们。 |
ground_by | 这个运算符将根据给定的键值映射函数将来自源可观察对象的值分组。 |
map | 这个运算符将根据给定的映射函数的输出,将源可观察对象中的每个值转换为一个新值。 |
scan | 这个运算符将对来自源可观察对象的值应用一个累加器函数,并返回一个具有新值的可观察对象。 |
过滤操作符
过滤操作符类别中我们将要讨论的操作符如下所示 –
展示示例
运算符 | 类别 |
---|---|
debounce | 此运算符将在给定的时间范围内从源可观察对象中提取值,并忽略其余时间。 |
distinct | 此运算符将提供源可观察对象中与其他值不同的所有值。 |
element_at | 此运算符将根据给定的索引从源可观察对象中提取一个元素。 |
filter | 此运算符将根据给定的谓词函数从源可观察对象中筛选值。 |
first | 此运算符将从源可观察对象中提取第一个元素。 |
ignore_elements | 此运算符将忽略源可观察对象中的所有值,仅执行完成或错误回调函数。 |
last | 此运算符将从源可观察对象中提取最后一个元素。 |
skip | 此运算符将返回一个可观察对象,该对象将跳过输入的前count项。 |
skip_last | 此运算符将返回一个可观察对象,该对象将跳过输入的最后count项。 |
take | 此运算符将根据给定的count,连续提供源值列表。 |
take_last | 此运算符将根据给定的count,依次提供源值列表中的最后count项。 |
错误处理运算符
我们要讨论的错误处理运算符包括:-
显示示例
操作符 | 描述 |
---|---|
catch | 当出现异常时,该操作符将终止源可观察对象。 |
retry | 当源可观察对象出现错误时,该操作符将进行重试,一旦重试次数完成,将终止。 |
实用运算符
下面是我们将在实用运算符类别中讨论的运算符。
显示示例
操作符 | 描述 |
---|---|
延迟(delay) | 这个操作符会根据给定的时间或日期延迟源Observable的发射。 |
素材化(materialize) | 这个操作符会将源Observable的值转换为明确的通知值形式发射。 |
时间间隔(time_interval) | 这个操作符会给出源Observable的值之间经过的时间间隔。 |
超时(timeout) | 这个操作符会在经过一段时间后发射源Observable的所有值,否则会触发一个错误。 |
时间戳(timestamp) | 这个操作符会给源Observable的所有值附加一个时间戳。 |
条件和布尔运算符
我们将要讨论的条件和布尔运算符类别中的运算符如下所示−
展示示例
运算符 | 描述 |
---|---|
all | 此运算符将检查源可观察对象的所有值是否满足给定条件。 |
contains | 此运算符将返回一个带有值 true 或 false 的可观察对象,表示给定值是否存在且是否为源可观察对象的值。 |
default_if_empty | 此运算符将在源可观察对象为空时返回默认值。 |
sequence_equal | 此运算符将比较两个可观察对象的序列或值数组,并返回一个带有值 true 或 false 的可观察对象。 |
skip_until | 此运算符将丢弃源可观察对象中的值,直到第二个可观察对象发出一个值。 |
skip_while | 此运算符将返回一个符合传递条件的源可观察对象的值的可观察对象。 |
take_until | 此运算符将丢弃源可观察对象中第二个可观察对象发出值或终止后的值。 |
take_while | 此运算符将在条件失败时丢弃源可观察对象中的值。 |
连通操作符
我们将要讨论的连通操作符包括:
显示示例
操作符 | 描述 |
---|---|
publish | 该方法将可观察对象转换为可连接的可观察对象。 |
ref_count | 这个操作符会将可观察对象变为普通的可观察对象。 |
replay | 该方法类似于replaySubject。即使可观察对象已经发出并且一些订阅者延迟订阅,该方法将返回相同的值。 |
组合运算符
以下是我们将在组合运算符类别中讨论的运算符。
显示示例
操作符 | 描述 |
---|---|
combine_latest | 此操作符将为给定输入的可观察对象创建一个元组。 |
merge | 此操作符将合并给定的可观察对象。 |
start_with | 此操作符将接受给定的值,并将其添加到源可观察对象的开头,返回完整的序列。 |
zip | 此操作符返回一个以元组形式包含值的可观察对象,该元组由取自给定可观察对象的第一个值等依次组成。 |