使用列表推导,我创建了一个包含 10 个不同 observables 的列表。然而,尽管它们的时间不同,它们总是打印相同的东西(“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()
首先,创建一个包含 10 个代码的列表,命名为ticker_0 到ticker_9。然后,它使用列表推导式创建 10 个可观察对象,这些可观察对象以 100 毫秒(加 10)的倍数递增。每个 observable(应该)发出不同的代码。然而,它们都发出ticker_9 (即列表中的最后一个ticker),即使列表理解中的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。应该是ticker_0 和ticker_5,即使在第二种情况下,排放的速度要慢得多。
为什么我的列表理解不能为每个可观察对象创建不同的ticker_x,即使它在间隔内有效?