gpt4 book ai didi

python - 更改 collections.deque 的 maxlen 属性

转载 作者:行者123 更新时间:2023-12-05 07:09:18 24 4
gpt4 key购买 nike

我最近一直在做一个小项目,其中根据用户可配置的参数设置 collections.dequemaxlen 属性。状态存储在 session 之间;任何事件的 deque 都构成此状态的一部分。因此,如果 session 之间存在配置更改,则需要更改每个已恢复的 dequemaxlen 属性。目前,我是这样做的:

if current_setting != last_setting:
# Deques are in a dictionary
for k in dictionary:
# Other data types and structures exist in this dictionary
if dictionary[k].__class__() == deque():
dictionary[k] = deque([*dictionary[k]], maxlen=current_setting)

创建一个新的 deque 并将旧的解包到其中似乎效率低下。我的问题是是否有;

  1. 一种在 deque 创建后更改 maxlen 属性值的方法,或者,如果这是不可能的/不明智的;
  2. 一种更有效的方法来实现上述示例中所实现的目标?

最佳答案

作为CKM's comment告诉我们,更改 maxlen 是不可能的,因为它是一个只读属性。

>>> d = deque("abcdefghij", maxlen=10)
>>> len(d)
10
>>> d
deque(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], maxlen=10)
>>> d.maxlen = 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: attribute 'maxlen' of 'collections.deque' objects is not writable

为了改变maxlen,你必须像这样用正确的maxlen创建一个新的deque对象:

>>> NEW_MAX_LENGTH = 3
>>> d = deque("abcdefghij", maxlen=10)
>>> d2 = deque(d, maxlen=NEW_MAX_LENGTH)
>>> d2
deque(['h', 'i', 'j'], maxlen=3)

参见 Python docs了解更多信息。

关于python - 更改 collections.deque 的 maxlen 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61658554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com