Я хочу написать функцию обертки для eternity
, которая заставит ее вести себя так, как будто ее лениво оценивают. Другими словами, его функциональность должна быть идентична ее функции lazyeternity
ниже. У меня есть эта функция packageN
, которая выполняет функцию и упаковывает ее в лямбда - или, по крайней мере, я думаю, что это так. (Упаковка lazyeternity
внутри лямбда задерживает ее оценку в вызове etest
.) Как я могу изменить packageN
, так что eternity = packageN(eternity)
может отражать поведение lazyeternity
?Создание функции ленив в Python
def eternity():
return eternity()
# How can I create a wrapper function for eternity...
# that will make it behave identical to this function?
def lazyeternity():
return lambda: lazyeternity()
def packageN(f):
return lambda *x: f(*x)
def etest(x, y):
return x
eternity = packageN(eternity)
# I want these both to return 4.
# Currently only the first one returns 4,...
# because the second one evaluates the eternity()...
# parameter forever. I want to delay the evaluation...
# of the parameter.
print etest(4, lazyeternity())
print etest(4, eternity())
Вы можете добавить более конкретный пример того, как вы хотите использовать это? Код в вашем вопросе не имеет большого смысла. –
Спасибо, @ Håken. Я попытался немного разъяснить, но дайте мне знать, могу ли я помочь. Я хочу иметь возможность применить 'packageN' к любой функции' f', чтобы сделать так, чтобы 'f' оценивался только тогда, когда это необходимо. – user1837378