我希望在Python中有一些可观察的集合/序列,使我能够监听更改事件,如添加新项或更新项:
list = ObservableList(['a','b','c'])
list.addChangeListener(lambda new_value: print(new_value))
list.append('a') # => should trigger the attached change listener
data_frame = ObservableDataFrame({'x': [1,2,3], 'y':[10,20,30]})
data_frame.addChangeListener(update_dependent_table_cells) # => allows to only update dependent cells instead of a whole table
A. 我发现了一个提供可观察集合实现的项目,看起来非常有前途:
https://github.com/dimsf/Python-observable-collections
它可以满足我的需求:
from observablelist import ObservableList
def listHandler(event):
if event.action == 'itemsUpdated':
print event.action + ', old items: ' + str(event.oldItems) + ' new items: ' + str(event.newItems) + ' at index: ' + str(event.index)
elif event.action == 'itemsAdded' or event.action == 'itemsRemoved':
print(event.action + ', items: ' + str(event.items) + ' at index: ' + str(event.index))
myList = ObservableList()
myList.attach(listHandler)
#Do some mutation actions, just like normal lists.
myList.append(10)
myList.insert(3, 0)
然而,最后一次更改是在6年前,我想知道是否有更加现代或内置于Python的替代方案?
B. 我还发现了RxPy:https://github.com/ReactiveX/RxPY
import rx
list = ["Alpha", "Beta", "Gamma"]
source = rx.from_(list)
source.subscribe(
lambda value: print(value),
on_error = lambda e: print("Error : {0}".format(e)),
on_completed = lambda: print("Job Done!")
)
有没有一种方法可以保持订阅开放,以便我能够在订阅之后追加新值到列表中? 伪代码:
source.subscribe(..., keep_open = True)
source.append("Delta") # <= does not work; there is no append method
source.close()
换句话说:我可以/应该将RxPy源用作可观察集合吗?
C. 在Python中处理事件和实现观察者模式似乎存在许多不同的可能性:
=> 在Python中实现可观察集合的推荐/Pythonic方式是什么?我应该使用过时的A还是改编自B的形式(似乎用于不同目的?)或甚至来自C的另一种策略?
=> 是否有计划以某种方式标准化这些可能性并直接在Python中包含默认可观察的集合?
相关问题,专门针对数据框: