0

リスト内包表記を使用して、10 個の異なるオブザーバブルのリストを作成しました。ただし、タイミングが異なるにもかかわらず、常に同じもの (「ticker_9」) を出力します。

from __future__ import print_function

from rx import Observable
import IPython

n_tickers = 10
tickers = ["ticker_" + str(x) for x in range(n_tickers)]
olist = [Observable.interval(x * 100 + 10).map(lambda _: tickers[x]) for x in range(n_tickers)]
IPython.embed()

これはまず、ticker_0 から ticker_9 までの 10 個のティッカーのリストを作成します。次に、リスト内包表記を使用して、増加する 100 ミリ秒の倍数 (+ 10) で出力する 10 個のオブザーバブルを作成します。各オブザーバブル (想定) は、異なるティッカーを発行します。ただし、それらはすべて ticker_9 (つまり、リスト内の最後のティッカー) を発行しますが、それらは異なる頻度で発行するため、リスト内包表記の x 変数認識されています。

何が起きてる?olist[0] の ticker_0、olist[1] の ticker_1 などを取得できないのはなぜですか?

観察:

In [1]: olist[0].subscribe(lambda s: print(s))
Out[1]: <rx.disposables.anonymousdisposable.AnonymousDisposable at 0xb60eaf30>
ticker_9

In [2]: ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9

または:

In [1]: olist[5].subscribe(lambda s: print(s))
Out[1]: <rx.disposables.anonymousdisposable.AnonymousDisposable at 0xb60c0f30>

In [2]: ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9
ticker_9

...同じこと、つまり。ticker_9 ずっと。2 番目のケースでは、エミッションがはるかにゆっくりと入ってきますが、ticker_0 と ticker_5 である必要があります。

リスト内包表記が間隔で機能しているにもかかわらず、オブザーバブルごとに異なる ticker_x を作成するために機能しないのはなぜですか?

4

0 に答える 0