从大量对象创建对象的最优化方式

Most optimized way for creating objects from a huge set of objects

我有一个迭代器 (userEnvironments),它包含很多用户环境对象,我想要创建一个包含 environment.name 作为键的字典和一个新的 EnvironmentStore 对象会使用 environment.

for environment in userEnvironments:
       set_cache(user,environment)

def set_cache(user, environment):
       _environments_cache[environment.name] = EnvironmentStore(user, environment)

内存效率在这里并不重要,但创建所有这些对象大约需要 4 秒。

所以问题是,在 python 中,只有按需创建对象的好方法是什么(例如,在另一个方法想要调用 class 时创建对象) ) 类似于发电机?

如果在这里创建 EnvironmentStore() 个实例需要时间,您可以使用自定义映射推迟创建这些实例:

from collections import Mapping

class EnvironmentStoreMapping(Mapping):
    def __init__(self, user, environments):
        self._user = user
        self._envs = {env.name: env for env in environments}
        self._cache = {}

    def __getitem__(self, key):
        try:
            return self._cache[key]
        except KeyError:
            store = EnvironmentStore(self._user, self._envs[key])
            self._cache[key] = store
            return store

    def __iter__(self):
        return iter(self._envs)

    def __len__(self):
        return len(self._envs)

    def __contains__(self, key):
        return key in self._envs

_environments_cache = EnvironmentStoreMapping(user, userEnvironments)

现在 EnvironmentStore 的创建被推迟到实际查找时。如果不是所有 env.name 值都被查找过,这不仅会推迟成本,而且会完全避免那些从未使用过的键。