RxPY - 運算子
本章詳細解釋了 RxPY 中的運算子。這些運算子包括:
- 使用運算子
- 數學運算子
- 轉換運算子
- 過濾運算子
- 錯誤處理運算子
- 實用程式運算子
- 條件運算子
- 建立運算子
- 可連線運算子
- 組合運算子
Reactive (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。現在,您可以使用任何數量的運算子(如上所示使用 pipe() 方法)對這個 Observable 執行不同的操作。運算子的執行將按順序在給定的 Observable 上進行。
要使用運算子,首先按照如下所示匯入它:
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 運算子對其進行求和。
輸出
E:\pyrx>python testrx.py Sum of Even numbers is 30
以下是我們即將討論的運算子列表:
- 建立 Observables
- 數學運算子
- 轉換運算子
- 過濾運算子
- 錯誤處理運算子
- 實用程式運算子
- 條件
- 可連線的
- 組合運算子
建立 Observables
以下是我們將在“建立”類別中討論的 Observables:
| Observable | 描述 |
|---|---|
| create | 此方法用於建立一個 Observable。 |
| empty | 此 Observable 不會輸出任何內容,並直接發出 complete 狀態。 |
| never | 此方法建立一個永遠不會到達 complete 狀態的 Observable。 |
| throw | 此方法將建立一個會丟擲錯誤的 Observable。 |
| from_ | 此方法將給定的陣列或物件轉換為 Observable。 |
| interval | 此方法將在超時後產生一系列值。 |
| just | 此方法將給定值轉換為 Observable。 |
| range | 此方法將根據給定的輸入生成一系列整數。 |
| repeat_value | 此方法將建立一個 Observable,該 Observable 將根據給定的計數重複給定的值。 |
| start | 此方法接受一個函式作為輸入,並返回一個 Observable,該 Observable 將返回來自輸入函式的值。 |
| timer | 此方法將在超時後按順序發出值。 |
數學運算子
我們將在數學運算子類別中討論的運算子如下:
| 運算子 | 描述 |
|---|---|
| average | 此運算子將計算給定源 Observable 的平均值,並輸出一個包含平均值的 Observable。 |
| concat | 此運算子將接收兩個或多個 Observable,並生成一個包含所有值的單個 Observable,這些值按順序排列。 |
| count | 此運算子接收一個包含值的 Observable,並將其轉換為一個包含單個值的 Observable。count 函式可選擇接受謂詞函式作為引數。 該函式的型別為布林型,只有當它滿足條件時才會將值新增到輸出。 |
| max | 此運算子將返回一個包含源 Observable 中最大值的 Observable。 |
| min | 此運算子將返回一個包含源 Observable 中最小值的 Observable。 |
| reduce | 此運算子接受一個名為 accumulator 的函式,該函式用於來自源 Observable 的值,並以 Observable 的形式返回累加值,並可以選擇將 seed 值傳遞給 accumulator 函式。 |
| sum | 此運算子將返回一個包含所有源 Observable 值之和的 Observable。 |
轉換運算子
我們將在轉換運算子類別中討論的運算子如下:
| 運算子 | 類別 |
|---|---|
| buffer | 此運算子將收集來自源 Observable 的所有值,並在滿足給定的邊界條件後定期發出這些值。 |
| group_by | 此運算子將根據給定的 key_mapper 函式對來自源 Observable 的值進行分組。 |
| map | 此運算子將根據給定的 mapper_func 的輸出將源 Observable 中的每個值更改為新值。 |
| scan | 此運算子將對來自源 Observable 的值應用累加器函式,並返回一個包含新值的新 Observable。 |
過濾運算子
我們將在過濾運算子類別中討論的運算子如下:
| 運算子 | 類別 |
|---|---|
| debounce | 此運算子將返回來自源 Observable 的值,直到給定的時間跨度,並忽略其餘時間。 |
| distinct | 此運算子將返回源 Observable 中所有不同的值。 |
| element_at | 此運算子將返回源 Observable 中給定索引的元素。 |
| filter | 此運算子將根據給定的謂詞函式過濾源 Observable 中的值。 |
| first | 此運算子將返回源 Observable 的第一個元素。 |
| ignore_elements | 此運算子將忽略來自源 Observable 的所有值,僅執行對 complete 或 error 回撥函式的呼叫。 |
| last | 此運算子將返回源 Observable 的最後一個元素。 |
| skip | 此運算子將返回一個 Observable,該 Observable 將跳過作為輸入的 count 個專案的第一次出現。 |
| skip_last | 此運算子將返回一個 Observable,該 Observable 將跳過作為輸入的 count 個專案的最後一次出現。 |
| take | 此運算子將根據給定的計數返回源值列表,這些值按連續順序排列。 |
| take_last | 此運算子將根據給定的計數返回源值列表,這些值從最後按連續順序排列。 |
錯誤處理運算子
我們將在錯誤處理運算子類別中討論的運算子如下:
| 運算子 | 描述 |
|---|---|
| catch | 此運算子將在出現異常時終止源 Observable。 |
| retry | 此運算子將在發生錯誤時重試源 Observable,並在重試次數完成後終止。 |
實用程式運算子
以下是我們將在實用程式運算子類別中討論的運算子。
| 運算子 | 描述 |
|---|---|
| delay | 此運算子將根據給定的時間或日期延遲源 Observable 的發射。 |
| materialize | 此運算子將使用顯式通知值的形式轉換來自源 Observable 的值。 |
| time_interval | 此運算子將返回來自源 Observable 的值之間經過的時間。 |
| timeout | 此運算子將在經過時間後返回來自源 Observable 的所有值,否則將觸發錯誤。 |
| timestamp | 此運算子將時間戳附加到來自源 Observable 的所有值。 |
條件和布林運算子
我們將在條件和布林運算子類別中討論的運算子如下:
| 運算子 | 描述 |
|---|---|
| all | 此運算子將檢查來自源 Observable 的所有值是否都滿足給定的條件。 |
| contains | 如果給定值存在且是源 Observable 的值,則此運算子將返回一個包含 true 或 false 值的 Observable。 |
| default_if_empty | 如果源 Observable 為空,則此運算子將返回預設值。 |
| sequence_equal | 此運算子將比較兩個 Observable 序列或一個值陣列,並返回一個包含 true 或 false 值的 Observable。 |
| skip_until | 此運算子將丟棄來自源 Observable 的值,直到第二個 Observable 發出一個值。 |
| skip_while | 此運算子將返回一個 Observable,該 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 | 此運算子返回一個包含元組形式值的 Observable,該元組是透過獲取給定 Observable 的第一個值等等形成的。 |
廣告