태섭씨 블로그
파이썬 람다 - 색다른 람다 튜토리얼 (1) 본문
자바 8의 람다를 공부하다가,
기존에 내가 알고 있던 파이썬의 람다를 복습하기 위해 이것저것 찾아보던 중
괜찮은 내용이 있어 필요한 내용만 정리한다. (번역이 정확하지는 않고 의역이 있으니 참고해야함. 내용을 중간중간 빼먹기도 했다.;)
원문 - https://pythonconquerstheuniverse.wordpress.com/2011/08/29/lambda_tutorial/
------------------------------------------------------------------------------------------------
색다른 람다 튜토리얼
(Yet Another Lambda Tutorial)
1 | def square_root(x): return math.sqrt(x) |
1 | square_root = lambda x: math.sqrt(x) |
1 2 3 4 5 6 7 8 9 10 | frame = tk.Frame(parent) frame.pack() btn22 = tk.Button(frame, text = "22" , command = lambda : self .printNum( 22 )) btn22.pack(side = tk.LEFT) btn44 = tk.Button(frame, text = "44" , command = lambda : self .printNum( 44 )) btn44.pack(side = tk.LEFT) |
여기서 기억해야 할 것은 tk.Button 은 command 파라미터의 아규먼트로 함수 오브젝트를 기대한다는 것이다. 이 함수 오브젝트는 버튼이 클릭될 때에 버튼이 호출하는 함수가 될 것이다. 기본적으로 이 함수는 버튼이 클릭될 때에 GUI 가 하는 동작을 정의할 것이다.
그러므로 command 파라미터를 통해서 button 에게 함수 오브젝트를 전달해야만 한다. 그리고 (각각의 다른 버튼들은 각각 다른 일을 하기 때문에) 각각의 버튼 오브젝트들에게는 각각 다른 함수 오브젝트가 필요하다는 것을 기억해야만 한다. 각각의 함수는 각각의 버튼에 의해 한번만 사용될 것이다.
그러므로 다음과 같이 코드를 짤 수 있지만
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | def __init__( self , parent): """Constructor""" frame = tk.Frame(parent) frame.pack() btn22 = tk.Button(frame, text = "22" , command = self .buttonCmd22) btn22.pack(side = tk.LEFT) btn44 = tk.Button(frame, text = "44" , command = self .buttonCmd44) btn44.pack(side = tk.LEFT) def buttonCmd22( self ): self .printNum( 22 ) def buttonCmd44( self ): self .printNum( 44 )
|
다음과 같이 짜는 것이 더 쉽고 명확하다
1 2 3 4 5 6 7 8 9 10 11 12 | def __init__( self , parent): """Constructor""" frame = tk.Frame(parent) frame.pack() btn22 = tk.Button(frame, text = "22" , command = lambda : self .printNum( 22 )) btn22.pack(side = tk.LEFT) btn44 = tk.Button(frame, text = "44" , command = lambda : self .printNum( 44 )) btn44.pack(side = tk.LEFT)
|
GUI 프로그램이 이러한 종류의 코드를 가지면, 버튼 오브젝트는 command 파라미터로 제공받은 함수 오브젝트를 호출(callback) 한다고 한다.
그러므로 코딩 시 람다가 가장 빈번하게 사용되는 곳은 Tkinter 나 wxPython 과 같은 GUI 프레임워크의 콜백함수라고 할 수 있다.
------------------------------------------------------------------------------------------------
나머지 내용은 다음 포스팅으로 ... ;;
'IT > Python' 카테고리의 다른 글
파이썬 소스의 컴파일 (0) | 2015.03.22 |
---|