Python 如何监听 List 长度
如题,想要监听一个 List 的长度,当长度发生变化时,执行某些逻辑。 但是又不想每次改变的时候都启动一个线程(开销太大了)
有什么办法可以实现吗?
----------------------- 以下是精选回复-----------------------
答:自定义 List 对象
答:你可以只开一个线程去循环查长度,或者开协程搞这件事
答:继承 list 对象,修改 append 、insert 等方法
答:google is your friend
答:變動以前檢查?
答:定义一个 ListProxy
ListProxy 定义 callback, __getattr__的时候把 object 、函数和原 len 传给 ListFuncProxy
ListFuncProxy 执行后对比 len, 出现变化回调 ListProxy 的 callback
就是略显蛋疼
答:Derive from List
答:继承 list 修改 list 的时候一起给做了
答:为啥要开一个线程去监听啊? 虽然不知道真实需求是什么, 但是监听 列表长度 然后相对应的逻辑, 这不是很简单吗? 当列表即将 增加, 删除, 这些前置动作代码中难道会不知道? 既然知道的话,这不就是追加列表的时候 就去执行
```
def listen_list(status: bool):
if status is True:
print("列表追加后应执行的代码逻辑")
else:
"反之"
def main():
status = "列表会追加元素 还是删除元素 已知 True: add, False: del"
listen_list(status=True)
```
答:设计模式 - 观察者模式 https://www.runoob.com/design-pattern/observer-pattern.html
答:像上面说的,继承 List ;或者自定义一个类 List 对象,包一层 append 或者 pop 方法
答:繼承 UserList ,https://docs.python.org/3/library/collections.html#collections.UserList
答:简单粗暴的办法,while True
答:重写 list 对象的方法。
答:blinker 或其他 pubsub 包
答:代码全局替换,比如在 xxx.add(xxx) 前面添加一行记录代码
答:写了一个简单的
https://gist.github.com/zmaplex/e05d7e6ac2a91a8f3f0b2317dac38f7f
0条评论