티스토리 뷰

파이썬

python lambda 함수 활용 법

헬로르르 2018. 5. 22. 19:12

python 에서 lambda 함수가 지원된다는 것을 대부분 알고 계실겁니다.
다만 이걸 어떻게 활용할 수 있는가 의문이 들긴 시작합니다. (초급개발자 대상)

이론적으론 1줄함수를 구현할 때 코드의 가독성을 높여준다 정도로 설명을 하는 곳이 많은데, 실제로 활용 될 수 있는 방법을 설명 할게요.

저 같은 경우는 python api 중 function을 인자로 받는 api에다가 함수+해당함수의 input param을 넘겨 줄 때 사용합니다.

예제를 한번 보도록 하겠습니다.
아래 코드는 아래 사진처럼 button 2개, text box 1개를 생성하는 코드입니다.

일반적으로 Button 함수에서 버튼을 눌렀을 때 실행되는 함수를 command=  인자로 받습니다.
다만 이때 함수는 인자값이 없어야만 tkinter button 함수 내부에서 처리가 가능합니다.

그러나.... 보통 function을 구현할 땐 인풋을 넣는 경우가 대부분 일겁니다. 이때 labmda를 이용한 트릭으로 인풋을 넣어 줄 수 있습니다.

buttonCommit2 를 보면 command=lambda: retrieve_input2(param1,param2) 를 사용한 것을 볼 수 있습니다.
x = lambda : retrieve_input2(param1,param2)
을 선언하면 x는 결국 인자값을 하나도 받지않는 (그러나 실제론 param1, param2를 input으로 받는) 람다함수 가 됩니다.

그러면 마치 button() 에서 x는 인자가 없는 함수처럼 동작이 되기 때문에, 정상적으로 button을 눌렀을 때 함수가 동작을 합니다. 그리고 실제로 우리는 x() 를 실행하면 retrieve_input2(param1, param2) 이 실행되게 되는 것이죠. 

이 트릭으로 python api 에서 callback 함수를 등록해야 할 때, 콜백함수가 동작 할 때 우리가 원하는 parameter도 같이 전달이 가능해 집니다.

참고로 밑에 코드는 스택오버플로우에서 적당히 복붙 후 제가 수정한 코드인데, 원작자는 retrieve_input 안에서 textBox 를 글로벌 변수로 사용해서 parameter 를 받아들였네요. labmda를 쓰긴 했지만 정확히 어떻게 parameter를 넘겨주면 될지 방법을 잘 몰랐나 보네요 ......... 

파이썬 스크립트 및 코드 개발에 도움이 되시길 바랍니다.

from tkinter import * def retrieve_input2(param1, param2): print(param1) print(param2) def retrieve_input(): inputValue=textBox.get("1.0","end-1c") print(inputValue) if __name__ == '__main__': root=Tk() textBox=Text(root, height=2, width=10) textBox.pack() buttonCommit=Button(root, height=1, width=10, text="Commit", command=lambda: retrieve_input()) #command=lambda: retrieve_input() >>> just means do this when i press the button buttonCommit.pack() param1 = 10 param2 = 20 buttonCommit2=Button(root, height=1, width=10, text="Commit2", command=lambda: retrieve_input2(param1,param2)) #command=lambda: retrieve_input() >>> just means do this when i press the button buttonCommit2.pack() mainloop()

<위 코드를 실행 시켰을 때 화면>


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함