0

使用列表推导,我创建了一个包含 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,即使它间隔内有效?

4

0 回答 0