Python 如何监听 List 长度

2022-08-22 11:54:40 +08:00
 monetto

如题,想要监听一个 List 的长度,当长度发生变化时,执行某些逻辑。 但是又不想每次改变的时候都启动一个线程(开销太大了)

有什么办法可以实现吗?

3428 次点击
所在节点    Python
19 条回复
RandomAccess
2022-08-22 11:57:10 +08:00
自定义 List 对象
liuxingdeyu
2022-08-22 11:57:43 +08:00
你可以只开一个线程去循环查长度,或者开协程搞这件事
ho121
2022-08-22 12:00:36 +08:00
继承 list 对象,修改 append 、insert 等方法
jdhao
2022-08-22 12:01:34 +08:00
google is your friend
roundgis
2022-08-22 12:03:45 +08:00
變動以前檢查?
westoy
2022-08-22 12:07:38 +08:00
定义一个 ListProxy

ListProxy 定义 callback, __getattr__的时候把 object 、函数和原 len 传给 ListFuncProxy

ListFuncProxy 执行后对比 len, 出现变化回调 ListProxy 的 callback

就是略显蛋疼
leimao
2022-08-22 12:25:12 +08:00
Derive from List
ila
2022-08-22 12:26:52 +08:00
@ho121 这才是正常做法
autumn426
2022-08-22 12:37:36 +08:00
继承 list 修改 list 的时候一起给做了
hhhhhh123
2022-08-22 14:13:36 +08:00
为啥要开一个线程去监听啊? 虽然不知道真实需求是什么, 但是监听 列表长度 然后相对应的逻辑, 这不是很简单吗? 当列表即将 增加, 删除, 这些前置动作代码中难道会不知道? 既然知道的话,这不就是追加列表的时候 就去执行
```
def listen_list(status: bool):
if status is True:
print("列表追加后应执行的代码逻辑")
else:
"反之"


def main():
status = "列表会追加元素 还是删除元素 已知 True: add, False: del"
listen_list(status=True)
```
gaobing
2022-08-22 14:20:07 +08:00
killva4624
2022-08-22 16:21:07 +08:00
像上面说的,继承 List ;或者自定义一个类 List 对象,包一层 append 或者 pop 方法
enrolls
2022-08-22 17:20:32 +08:00
dorothyREN
2022-08-22 17:24:50 +08:00
简单粗暴的办法,while True
dorothyREN
2022-08-22 17:25:27 +08:00
@dorothyREN #14 或者封装一个修改 list 的方法,然后都调用这个方法修改
SenLief
2022-08-22 17:27:15 +08:00
重写 list 对象的方法。
yucongo
2022-08-22 23:04:49 +08:00
blinker 或其他 pubsub 包
zxCoder
2022-08-22 23:23:42 +08:00
代码全局替换,比如在 xxx.add(xxx) 前面添加一行记录代码
zmaplex
2022-08-31 20:57:31 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/874515

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX