リスト内包表記を使用して、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 を作成するために機能しないのはなぜですか?