U E D R , A S I H C RSS

2학기파�선스터디/함수

1. 함수ì�˜ ì •ì�˜ì™€ 호ìœ

~cpp 
def 함수명(�수들..):
    문들(statements)
    return <ê°’>


~cpp 
def add(a,b):
    return a+b

returnì�€ 계산ë�œ ê°’ì�„ 함수를 호ìœí•œ 곳으로 ë�Œë ¤ì¤€ë‹¤. def는 함수 ê°�체를 ìƒ�성하고 ê·¸ ê°�체를
add란 �름� 할당한다. 즉, �름 add는 함수 �체� reference를 갖고 있다.

add는 함수 ê°�체를 참조하는 ì�´ë¦„ì—� 불과하므로 다른 ì�´ë¦„ì�„ ì�´ìš©í•´ 함수를 호ìœí•  수ë�„ 있다.
~cpp 
>>> f = add
>>> f(4,5)
9

pass는 아무 �� 하지 않는 통과문(statement)�다. 함수는 최소한 한 개 ��� 문� 가져야 하기 때문� 사용한다.
~cpp 
def add(a,b):
    pass

2. �수 전달 방법

~cpp 
>>> def f(t):
	t = 10

	
>>> a = 20      # a는 �체 20� 참조한다.
>>> f(a)        # a를 t를 통해 넘겼으므로 t는 a와 ��한 참조를 갖는다. 그리고 t = 10�서 t가 �체 10� 참조한다. �때 a� 참조는 변함없다.
>>> print a
20

3. return문

~cpp 
>>> def f():
	return

>>> f()
>>> a = f()
>>> print a
None
ì�¸ìˆ˜ ì—†ì�´ return문 ë§Œì�„ 사용하면 함수 호ìœì¸¡ì—� 아무 ê°’ë�„ 전달하지 않는다.
�수 없� return� 하지만, 실제로는 None �체가 전달�다.
None �체란 파�� 내장 �체로서, 아무 값� 없�� 나타내기 위한 �체�다.

값� 전달�지 않았다면 �름 a가 �성� 수 없었� 것�다.

return문� 사용하지 않아� None��는 리턴 값� 존재한다.
즉, 리턴 값� 존재하지 않� 때 언제나 None �체를 넘긴다.

4. Scoping Rule

* �름 공간
  • 지역 ì˜�ì—­(local scope) - 함수
  • ì „ì—­ ì˜�ì—­(global scope) - 모듈(파ì�¼)
  • 내장 ì˜�ì—­(built-in scope) - 파ì�´ì�¬ 언어 ìž�ì²´ì—�서 ì •ì�˜í•œ ë‚´ìš©

��한 �름� 여러 �름 공간� 걸� 있� 경우 LGB� 따른다.
LGB는 Local, Global, Built-in � 약�로 지역, 전역, 내장 순으로 �름 공간� �용�다.

~cpp 
# g, h는 전역 
g = 10
h = 5

def f(a):       # a는 지역
    h = a + 10  # h는 지역(새로 정�했으므로)
    b = a + g   # b� 지역, g는 전역
    return b

g, h는 함수 외부�서 정��었으므로 전역, a,b는 함수 내부�서만 사용�는 지역 변수�다.
h는 전역� 있지만 함수 내부�서 �성하므로 함수 내부�서는 지역 변수 h를,
함수 외부�서는 전역 변수 h를 참조한다.
함수 f� 지역 �름들� 함수 f가 종료�면서 사�진다(�름 공간 �체가 사�진다).


함수 f내부� h를 전역변수로 사용하려면(즉, 전역변수h� 값� 바꾸고�한다면)
global문� 사용하여 h가 전역 변수임� 선언해야 한다.
~cpp 
def f(a):       # a는 지역
    global h
    h = a + 10  # h는 전역

~cpp 
g = 10

def f():
    a = g
    g = 20
    return a

f()

  • 중첩 ì˜�ì—­(Nested scopes) ì§€ì›�(2.1ì�´ìƒ�)

~cpp 
x = 2           # global
def F():
    x = 1       # 함수 G 안�서 여기는 local� global� 아니다
    def G():
        print x
    G()

F()
함수 G�서 참조하는 x는 지역(함수 G안), 전역(모듈), 내장 �역만 찾게 �므로 함수 F� 정�� x가 참조�지 않는다.(x = 2)
그러나 2.1���서는 함수 F 안� x를 참조하므로 올바른 결과가 나온다.

5. 함수 �수

5.1. 기본 �수

~cpp 
>>> def incr(a, step=1):
	return a + step

>>> b = 1
>>> b = incr(b)        # 1 �가
>>> b
2
>>> b = incr(b, 10)    # 10 �가
>>> b
12

5.2. 키워드 �수

~cpp 
>>> def area(height, width):
	print height, width
	# 순서가 아닌 �름으로 값� 전달�다

	
>>> a = area(width=20, height=10)
10 20

5.3. 가변 �수 리스트

고정�지 않� 수� �수를 함수� 전달 - 나머지는 모� 튜플 형�으로 받는다
~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)

5.4. 정��지 않� 키워드 �수 처리하기

미리 정��어 있지 않� 키워드 �수를 받으려면 함수 정�할때 마지막� **kw형�으로 기술한다.
전달 받는 형�� 사전�다. 키는 키워드(변수명), 값� 키워드 �수로 전달� 값� �다.
~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}

5.5. 튜플 ì�¸ìˆ˜ì™€ 사전 ì�¸ìˆ˜ë¡œ 함수 호ìœí•˜ê¸°(2.0 ì�´ìƒ�)

~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

6. 람다 함수

람다 함수는 �름� 없는 한 줄 짜리 함수�다.
~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문� �해 명시�으로 리턴 값� 지정�다 �� 결과가 리턴�다
내부 변수 선언 지역 �역� 변수를 �성하고 사용하는 것� 가능 지역 �역� 변수를 �성하는 것� 불가능

7. 재귀� 프로그래�

~cpp 
>>> def sum(N):
	if N==1: return 1
	return N + sum(N-1)

>>> sum(10)
55

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:13
Processing time 0.0079 sec