~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문에 의해 명시적으로 리턴 값이 지정된다 | 식의 결과가 리턴된다 |
| 내부 변수 선언 | 지역 영역에 변수를 생성하고 사용하는 것이 가능 | 지역 영역에 변수를 생성하는 것이 불가능 |