함수
반복되는 작업이나 특정 기능을 수행하는 코드를 모아, 여러 곳에서 재사용하면 좋다.
이렇게 재사용 가능한 코드 조각을 정의하는 방법은 "함수"를 만드는 것이다.
"함수"는 코드의 모음에 이름을 붙인 것으로 단일 작업 또는 그 이상의 작업을 하며 값을 반환한다.
- 함수 정의시 "def" 문을 사용한다.
- 가장 중요한 것은 파이썬에서 함수는 "1급 객체"이다.
- 1급 객체의 조건
- 변수나 데이터 구조안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값(return value)으로 사용할 수 있다.
- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
함수 문법
def function_name( parameters ):
"function_docstring"
function_suite
return [expression]
def 함수명(인자목록):
구현부
함수 작명(네이밍)
- 소문자
- 단어 사이에는 언더스코어(_)
- 숫자로 시작하면 안된다.
- 동사
함수 예제
def print_me( str ):
"This prints a passed string into this function"
print(str)
return
함수 호출하기
def print_me( str ):
"This prints a passed string into this function"
print(str)
return;
print_me("I'm first call to user defined function!")
print_me("Again second call to the same function")
# 출력
I'm first call to user defined function!
Again second call to the same function
return 구문은 옵션인가?
def print_me1(str):
print(str)
def print_me2(str):
print(str)
return
def print_me3(str):
print(str)
return "ok"
x = print_me1('Hello')
y = print_me2('Sonic')
z = print_me3('Hi')
print(x, y, z)
참조나 값으로 함수에 전달하기
파이썬의 모든 파라미터(인자)는 레퍼런스로 전달된다.
이 뜻은 함수 내에서 파라미터를 변경하면 함수를 호출했던 바깥도 변경된다는 뜻이다.
예제
# 함수 정의
def change_me( mylist ):
"This changes a passed list into this function"
mylist.append([1,2,3,4]);
print("Values inside the function: ", mylist)
return
# 함수 호출
mylist = [10,20,30]
change_me( mylist )
# 리스트 확인
print("Values outside the function: ", mylist)
함수의 인자
함수는 아래의 3가지 형태로 인자를 사용하여 호출할 수 있다.
- 필수 인자
- 키워드 인자
- 기본 인자
- Variable-length arguments
필수 인자
필수 인자는 함수에게 인자값을 전달할 때 정확하게 순서에 맞도록 전달한다.
즉 함수 정의시 인자와 호출시 인자가 매칭 되어야 한다.
>>> def print_hi(str):
... print('hi' + str)
...
>>> print_hi()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: print_hi() takes exactly 1 argument (0 given)
키워드 인자
키워드 인자는 함수를 호출시 인자를 키워드로 연결할 수 있다.
인자의 식별은 파라미터의 이름으로 사용할 수 있다.
# 함수 정의
def print_me( str ):
"This prints a passed string into this function"
print(str)
return
# 함수 호출
print_me( str = "My string")
My string
기존 함수 인자와 다른 예제
# 함수 정의
def print_info( name, age ):
"This prints a passed info into this function"
print("Name: ", name)
print("Age ", age)
return;
# 함수 호출
print_info( age=50, name="miki" )
Name: miki
Age 50
기본 인자
기본 인자는 함수 호출시 값을 전달하기 않을 때, 이 전달되지 않은 인자에 기본값을 넣어 사용할 때 사용한다.
아래 예제는 값이 전달되지 않았을 때도 기본 출력이 되도록 하는 예제이다.
# 함수 정의
def print_info( name, age = 35 ):
"This prints a passed info into this function"
print("Name: ", name)
print("Age ", age)
return;
# 함수 호출
print_info( age=50, name="miki" )
print_info( name="miki" )
# 출력
Name: miki
Age 50
Name: miki
Age 35
가변 길이 인자
가변 길이 인자란 정의한 함수보다 더 인자가 필요로 하는 경우에 사용한다.
기본 인자와 다르게 함수 정의시 이름을 주지 않는다.
기본 문법
def functionname([formal_args,] *var_args_tuple ):
"function_docstring"
function_suite
return [expression]
간단한 예제
# 함수 정의
def printinfo( arg1, *vartuple ):
"This prints a variable passed arguments"
print("Output is: ")
print(arg1)
print(type(vartuple))
for var in vartuple:
print var
return
# 함수 호출
printinfo('first', 1, 2, 3, 'a')
# 결과
Output is:
first
<type 'tuple'>
1
2
3
a
__doc__
함수는 docstrings를 가지고 잇다.
함수명.__doc__ 또는 help
예제코드
>>> def print_hi(str):
... """print hi function"""
... print(str)
...
>>> print_hi.__doc__
'print hi function'
# help
Help on function print_hi in module __main__:
print_hi(str)
print hi function
(END)