Гледах статия на уебсайта на Peter Norvig, където той се опитва да отговори на следния въпрос (това не е моят въпрос, между другото) „Мога ли да направя еквивалента на (тест? резултат: алтернатива) в Python?“
ето една от опциите, изброени от него,
def if_(test, result, alternative=None):
"If test is true, 'do' result, else alternative. 'Do' means call if callable."
if test:
if callable(result): result = result()
return result
else:
if callable(alternative): alternative = alternative()
return alternative
И ето един пример за употреба.
>>> fact = lambda n: if_(n <= 1, 1, lambda: n * fact(n-1))
>>> fact(6)
720
Разбирам как работи това (мисля), но просто си играех с кода и реших да видя какво ще се случи, когато променя третия аргумент в дефиницията на „факт“ по-горе на n * fact(n-1), че е, променете го на неизвикваем израз. При стартирането му интерпретаторът влиза в безкраен цикъл. Имам доста добра представа защо това се случва, тоест функцията if_ връща обратно същия израз, който получава. Но какъв е видът на този израз? Какво точно се случва тук? Не търся подробно обяснение, а само някои насоки към модела за оценка на Python, който може да помогне за разбирането ми.
Благодаря!
result if test else alternative
. - person kennytm   schedule 26.04.2010