小编Haz*_*zan的帖子

如何从@cached_property 装饰器清除缓存?

我有一个名为“值”的函数,它进行大量计算......

如果标识符的数据集未更改,则函数的结果始终相同。

一旦针对某个标识符更改了数据集,我想清除缓存,然后让函数再次计算它。

您可以通过查看此代码更好地了解我:

from functools import cached_property


class Test:
    identifiers = {}
    dataset = an empty object of dataset type

    def __init__(self, identifier, ...)
        self.identifier = identifier
        ...
        Test.identifiers[identifier] = self

    ...

    @cached_property
    def value(self):
        result = None
        # heavy calculate based on dataset
        return result

    @classmethod
    def get(cls, identifier):
        if identifier in cls.identifiers:
            return cls.identifiers[identifier]
        else:
            return cls(identifier, ...)

    @classmethod
    def update(cls, dataset):
        for block in dataset:
            # assume there is block['identifier'] in each block
            # here i …
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
1
解决办法
921
查看次数

嵌套字典理解的执行顺序

我正在尝试转换此列表:

data = [{'A': 123}, {'B': 456}, {'C': 789}]
Run Code Online (Sandbox Code Playgroud)

到这本词典:

{'A': 123, 'B': 456, 'C': 789}
Run Code Online (Sandbox Code Playgroud)

通过使用字典理解:

{key: value for key, value in dictionary.items() for dictionary in data}
Run Code Online (Sandbox Code Playgroud)

例外:

NameError: name 'dictionary' is not defined
Run Code Online (Sandbox Code Playgroud)

python dictionary list dictionary-comprehension

0
推荐指数
1
解决办法
58
查看次数