람다 피클

파이썬에서 lambda함수는 pickle이 안된다. pickle이 뭔지는 나도 모른다.(!)

아무튼 lambda를 포함한 클래스를 multiprocessing을 하려고 시도했더니 pickle이 안된다면서 오류를 내뿜길래 다음과 같이 조치하였다.

원래: lambda y: SomeExpressionOfY(y)

참고로 이건 f=lambda y: SomeExpressionOfY(y) 처럼 이름을 붙여줘도 오류가 난다. 다음과 같이 명시적으로 정의해야 한다.

조치후:

def f(y):

return lambda y: SomeExpressionOfY(y)

왜 이렇게 하였는가?

사실 저 lambda 자리에 들어가야 할 것이 eval(“lambda y: …”)인 구문이기 때문이다. 물론 eval을 쓸 경우 해킹에 취약해진다는 문제가 발생하지만, 지금 구현중인 코드에서는 eval을 쓰지 않으면 매스매티카 급의 수식 파서를 만들어야 하는 문제가 생겨서 써야만 했다. 어차피 나 혼자 쓰거나, 배포하더라도 그걸 해킹해서 뭐하게 수준의 프로그램이라 별 문제는 없을 것으로 보인다.

Leave a Reply

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

%d 블로거가 이것을 좋아합니다: