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.

You May Also Like
Read More

3. 한 단계를 넘어간다.

참 해보고나면 별거 아니지만, 시행착오가 많다. (1) Class activation map (2) 그리고 이것을 뽑아내기 위해 마지막 convolution layer를…

[Python] Scikits.audiolab 설치

1. $sudo easy_install scikits.audiolab 실행시 다음과 같은 에러메세지 발생 error: sndfile (http://www.mega-nerd.com/libsndfile/) library not found. Directories to search…

[GAE/Python] Schema 수정하기 #2. 삭제

이번에는 DB에서 항목을 삭제하는 것. https://cloud.google.com/appengine/articles/update_schema 및 http://sandrylogan.wordpress.com/2010/12/08/delattr/ 사이트 참조   class AlbumModel(ndb.Expando): #ndb.Model -> ndb.Expando로 교체 artist…