twobomb, Два раза вызывать эту функцию нельзя. В ней запросы к БД и другим API, время выполнения больше 100-200 мс, на производительности скажется сильно.
Andy_U, для одинаковых параметров не всегда (почти всегда, но не хочется терять эту не лишнюю случайность) будет одинаковый результат. Есть альтернатива такому хеширование внутри, грубо говоря, только двух этих вызовов?
По логике программы, двух вызовов функции с одинаковыми данными не произойдет никогда, но при дебаге это полезно.
Max Payne, Сомневаюсь. Еще вариант, спрячьте проверку на dict в тело функции f2(). Ну, или эти две строчки оформите функцией. Но я смысла не понимаю, зачем Вам это?
Andy_U, вы так бодро советуете, поскольку, видимо, не осведомлены - всё еще существуют функции с побочными эффектами.
А вам, Max Payne, я бы посоветовал устремить свои усилия в более консруктивное русло, или переключиться на более другой язык. Может, руби:
def f()
return {"a" => 1};
end
result = nil
p(result) if (result = f()).is_a?(Hash) # {"a"=>1}
longclaps, В исходном варианте автора вопроса, функция вызывается один раз, если ее обернуть декоратором и воспользоваться вариантом из первого комментария, то тоже один раз. Если она вызывается еще где-то, то конечно... Ну и откуда я знаю, в реальном коде есть у нее параметры, или нет.