3

RxPy我开始使用该模块学习 Python 中的反应式编程。现在,我有一个案例,我想根据接收到的元素运行不同的功能。我以非常直接的方式实现了它

from rx.subject import Subject
from rx import operators as ops

def do_one():
    print('exec one')

def do_two():
    print('exec two')

subject = Subject()
subject.pipe(
    ops.filter(lambda action: action == 'one')
).subscribe(lambda x: do_one())

subject.pipe(
    ops.filter(lambda action: action == 'two')
).subscribe(lambda x: do_two())


subject.on_next('one')
subject.on_next('two')

对我来说,这似乎有点难看,但是,我在操作/Observables 中找不到任何情况、开关或其他方法来根据收到的元素触发不同的执行。

有没有更好的方法来做到这一点?

4

1 回答 1

1

这个解决方案可能很老套,但您可以通过几种不同的方式使用它:

from rx.subject import Subject
from rx import operators as ops

def do_one():
    print('exec one')

def do_two():
    print('exec two')

subject = Subject()
subject.subscribe(lambda x: globals()[x]())

subject.on_next('do_one')
subject.on_next('do_two')

生产

exec one
exec two

我还使用了类似的东西,其中类在呼叫时是未知的......就像这样:

import Workers  # a module in my app with different workers

Wrkr = getattr(Workers, wrkr_type)  # in your case, x == wrkr_type
w = Wrkr(...)

所以当你需要将其中一些功能移动到不同的文件甚至模块中时,你仍然可以实现相同的解决方案......一般来说,当然,你不想使用globals();)

于 2021-02-05T17:39:39.513 回答