~cpp def 함수명(인수들..): 문들(statements) return <값>
~cpp def add(a,b): return a+b
~cpp >>> f = add >>> f(4,5) 9
~cpp def add(a,b): pass
~cpp >>> def f(t): t = 10 >>> a = 20 # a는 객체 20을 참조한다. >>> f(a) # a를 t를 통해 넘겼으므로 t는 a와 동일한 참조를 갖는다. 그리고 t = 10에서 t가 객체 10을 참조한다. 이때 a의 참조는 변함없다. >>> print a 20
~cpp >>> def f(): return >>> f() >>> a = f() >>> print a None
~cpp # g, h는 전역 g = 10 h = 5 def f(a): # a는 지역 h = a + 10 # h는 지역(새로 정의했으므로) b = a + g # b도 지역, g는 전역 return b
~cpp def f(a): # a는 지역 global h h = a + 10 # h는 전역
~cpp g = 10 def f(): a = g g = 20 return a f()
~cpp x = 2 # global def F(): x = 1 # 함수 G 안에서 여기는 local도 global도 아니다 def G(): print x G() F()함수 G에서 참조하는 x는 지역(함수 G안), 전역(모듈), 내장 영역만 찾게 되므로 함수 F에 정의된 x가 참조되지 않는다.(x = 2)
~cpp >>> def incr(a, step=1): return a + step >>> b = 1 >>> b = incr(b) # 1 증가 >>> b 2 >>> b = incr(b, 10) # 10 증가 >>> b 12
~cpp >>> def area(height, width): print height, width # 순서가 아닌 이름으로 값이 전달된다 >>> a = area(width=20, height=10) 10 20
~cpp >>> def varg(a, *arg): print a, arg >>> varg(1) 1 () >>> varg(2,3) 2 (3,) >>> varg(2,3,4,5,6) 2 (3, 4, 5, 6)
~cpp >>> def f(width, height, **kw): print width, height print kw >>> f(width = 10, height=5, depth=10, dimension=3) 10 5 {'depth': 10, 'dimension': 3}
~cpp >>> def h(a,b,c): print a,b,c >>> args = (1,2,3) >>> h(*args) 1 2 3
~cpp >>> dargs = {'a':1, 'b':2, 'c':3} >>> h(**dargs) 1 2 3
~cpp >>> args = (1,2) >>> dargs ={'c':3} >>> h(*args, **dargs) 1 2 3
~cpp lambda 콤마로 구분된 인수들: 식
~cpp >>> f = lambda:1 >>> f() 1
~cpp >>> g = lambda x, y: x+y >>> g(1,2) 3
~cpp >>> incr = lambda x, inc=1: x+inc >>> incr(10) 11 >>> incr(10,5) 15
~cpp >>> vargs = lambda x, *args: args >>> vargs(1,2,3,4,5) (2, 3, 4, 5)
~cpp >>> kwords = lambda x, *args, **kw: kw >>> kwords(1,2,3, a=4, b=6) {'a': 4, 'b': 6}
구분 | def로 정의되는 함수 | lambda 함수 |
문/식 | 문(statement) | 식(expression) |
함수의 이름 | def 다음에 지정된 이름으로 생성한 함수 객체를 치환한다 | 함수 객체만을 생성한다 |
몸체 | 한 개 이상의 문을 포함 | 하나의 식 |
리턴 | return문에 의해 명시적으로 리턴 값이 지정된다 | 식의 결과가 리턴된다 |
내부 변수 선언 | 지역 영역에 변수를 생성하고 사용하는 것이 가능 | 지역 영역에 변수를 생성하는 것이 불가능 |