LINUX.ORG.RU

Кучей способов. Самый топорный - глобальная переменная. Другой очевидный - объект класса с методом __call__()

eternal_sorrow ★★★★★
()

Другой, менее очевидный, но довольно простой способ, более похожий на хак - сохранять значение в аттрибут объекта функции.

eternal_sorrow ★★★★★
()
def memofun(v):
    if not memofun.__dict__.get('called'):
        memofun.called = True
        return v**2
    else:
        return v**3
        
print(memofun(2), memofun(2))
anonymous
()

Как этого добиться?

Да, гуглишь любой пример с мемоизацией.

И, почему ты в своих решённых темах, не отписываешься? Как-то желание помогать пропадает от такого отношения.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)

Как этого добиться

Тру питонист запилил бы декоратор. Зря что-ли этот сахарок придумали?

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

Ваш вариант не-говнокодового решения?

Решения чего? Постановка исходной задачи отсутствует.

anonymous
()
Ответ на: комментарий от anonymous

Использовал этот вариант.

thunar ★★★★★
() автор топика
Ответ на: комментарий от Lizhen

Нет, но через замыкание можно решить эту задачу

Goury ★★★★★
()

Замыканием с изменяемым объектом внутри.

anonymous
()

Нужно сделать некоторую штуку, которая ведёт себя как обычная функция, но при первом вызове делает некоторое вычисление и сохраняет его во внутренний кэш.

functools.lru_cache
https://docs.python.org/3.6/library/functools.html

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)

Гвидобейсикобыдлокодер хочет изобрести ленивые вычисления?

anonymous
()
Ответ на: комментарий от Dred

Нет, там при старте вычисляется некоторая замороченная функция и аппроксимирующий сплайн, а дальше просто обращаюсь к сплайну. Ну вот этот сплайн как раз как мне подсказали в python функтор или функция с кешем? (комментарий) сохранил внутри.

thunar ★★★★★
() автор топика
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от Esper

заюзал бы готовый декоратор, который есть в стандартной либе

Тру питонист прочитал только «освой питон за 3 часа» и такими подробностями не владеет.

no-such-file ★★★★★
()
Ответ на: комментарий от thunar

так и раздели на две функции. иначе у тебя получается какая-то поломанная черная коробка.

def mkSpline(): Spline = ???
def callWith(spline: Spline) = ???

def startup() = {
  val spline = mkSpline()
  // пользуйся, как хочешь. при этом можешь нормально тестить обе функции и ссылочная прозрачность на месте
  for (i <- 1 to 100) callWith(spline)
}

олсо, функторы здесь ни при чем

cdshines ★★★★★
()
Ответ на: комментарий от anonymous

поддержу данного анонимуса.

забивайте гвозди в крышку этого вашего питона и дальше :-) на pep8 и зен - плюй, забивай

PexuOne
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.