함수

반복되는 작업이나 특정 기능을 수행하는 코드를 모아, 여러 곳에서 재사용하면 좋다.

이렇게 재사용 가능한 코드 조각을 정의하는 방법은 "함수"를 만드는 것이다.

"함수"는 코드의 모음에 이름을 붙인 것으로 단일 작업 또는 그 이상의 작업을 하며 값을 반환한다.

  • 함수 정의시 "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)

results matching ""

    No results matching ""