Python Lambda expression in For Loop

 

While I discussed an error with my colleage, I can find a simple solution.

후배의 python 질문에 대해 대답해주다가 알게된 간단한 내용.

어떤 함수를 다른 함수의 변수처럼 사용하거나, 어떤 상황에 맞게 변화하는 함수를 만들때 lambda 함수를 사용할 수 있다. 좀더 자세한 설명은 이곳 (http://pentode.tistory.com/126) 참조

for loop를 이용해서 lambda식을 썼더니, 다음과 같은 결과가 나온다.

While I was trying lambda expression in for-loop, I got wrong result.

둘다 19, 내가 예상했던 결과는 10, 11이다. (fl[0](10) 이니까 i=0, x=10, f[1](10)은 i=1, x=10)

Both are 19, I expected 10 and 11. (fl[0](10):  i=0, x=10, f[1](10): i=1, x=10)

 

구글링 결과, 내가 이해한바로는 lambda식에서 변수로 정의되지 않은 i가 함수로 들어가버리면, i의 reference는 함수가 실행될 때 읽히게 되는 것 이다. 함수를 정의하는 순간이 아닌.

After searching in Google, I understood that while undefined variable is used in the expression, the value of the variable is read when the function is called, not when it is defined.

 

즉 다음과 같이 i를 중간에 바꿔버리면,

So, if I change ‘i’ after definition,

다음과 같은 결과가 나온다.

I got wrong(but now expectable) result.

 

이를 교정하기 위해서는, i를 lambda식 내부가 아닌, 변수를 정의하는 곳에서 넣어줘야 한다.

To fix this, we have to put ‘i’ in left side of lambda expression, not right side.

이 경우 우리가 원하는 값을 얻게 된다.

Now we can get what we expected.

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.