Цель запоминания состоит в том, чтобы сохранить результат операции, которая была дорогостоящей для выполнения, чтобы можно было предоставить второе, третье и т. Д. Время без необходимости повторения операции и многократного несения расходов.
Мемоизация обычно применяется к функции, которая (а) выполняет дорогостоящую операцию, (б) всегда дает один и тот же результат при одинаковых аргументах и (в) не имеет побочных эффектов на состояние программы.
Мемоизация обычно реализуется в такой функции путем «сохранения» результата вместе со значениями аргументов, которые привели к этому результату.Это особая форма общей концепции кеша.Каждый раз, когда вызывается функция, она проверяет свой кэш заметок, чтобы увидеть, определил ли он уже результат, соответствующий текущим значениям аргументов.Если в кеше содержится результат, его можно вернуть без необходимости повторного вычисления.
Похоже, ваша функция предназначена для создания нового dict при каждом вызове.Кажется, не существует разумного способа запоминания этой функции: вы всегда хотите, чтобы вызывающий вызов возвращал новый dict, чтобы его использование полученного dict не мешало какому-либо другому вызову функции.
Единственный способ, которым я могу визуализировать, используя запоминание, было бы, если (1) вычисление одного или нескольких значений, помещенных в результат, является дорогостоящим (в этом случае я, вероятно, определил бы функцию, которая вычисляет значение изапомните эту функцию) или (2) функция newDict предназначена для возврата той же коллекции значений, заданных конкретным набором значений аргументов.В последнем случае я бы не использовал dict, а вместо этого использовал бы немодифицируемый объект (например, класс как dict, но с защитой от изменения его содержимого).
Относительно вашего подзапроса, вопросы, которые вам нужныспросить: (1) - это количество раз, когда newDict вызывается соответствующим образом, и (2) можно сократить время выполнения каждого выполнения newDict.Это два отдельных и независимых вопроса, которые должны быть индивидуально рассмотрены соответствующим образом.
Кстати, ваше определение функции содержит опечатку - в возвращении не должно быть «d» между ключевым словом return и открытой скобкой.