+ 1

Another Lambda question ????

def blondie(f): a = lambda x: f(x +1) return a a = blondie(lambda q: q * q) print(a(2)) //output is 9 I am a bit stuck on the logic

29th Aug 2019, 5:39 PM
PHILIP
3 odpowiedzi
+ 2
Nice explanation, Tibor Santa . I'd like to add that what we see there is a decorator without using the @... syntax (which you can't on lambda functions). I have added some code for demonstration: https://code.sololearn.com/cWjO450w8UHs/?ref=app
29th Aug 2019, 7:21 PM
Thoq!
Thoq! - avatar
+ 3
I am trying my best to understand and explain. Blondie is a "higher order function", meaning that it takes a function as parameter. It returns the same function (that is enclosed in the lambda expression) but with the functions argument incremented by one. Then we assign to variable a the result of blondie, that is a function - in this case we passed q*q in a lambda, meaning that blondie gets a square function, and transforms its arguments. So a() now means (q+1)*(q+1) Hence in the end, a(2) is rightfully 3*3=9 Hope that makes sense, is a bit convoluted logic for me to actually put this in any real program :)
29th Aug 2019, 5:54 PM
Tibor Santa
Tibor Santa - avatar
+ 3
Thoq! Wow, well spotted the decorator paralel. Makes complete sense, just usually decorator / wrapper functions are spelled out more explicitly in the common examples so its hard to notice this is the same thing.
29th Aug 2019, 7:32 PM
Tibor Santa
Tibor Santa - avatar