함수


 앞에서 공부할 때 활용했던 함수에 대해 자세히 알아보겠습니다.


- 함수의 정의


1) 함수란?
 여러 개의 statement를 하나로 묶은 단위

2) 함수의 장점
 - 반복 수행 가능
 - 코드의 일정 부분을 논리적으로 독립화 가능

3) 함수 정의
 함수는 def 키워드를 사용해 정의하며, return 키워드로 반환 값을 지정할 수 있습니다. 아무런 내용을 쓰지 않을 때에는 pass 키워드를 사용해야 합니다. 인자를 사용하지 않아도 괄호( )를 사용해야 합니다. 또한 콜론(:)을 꼭 붙여줘야 합니다.
----------------------------------------------------------------------------------------
# 함수 정의
def test_func():
pass

def add(a,b):
return a+b
----------------------------------------------------------------------------------------

- 함수의 호출과 인수 값 전달


1) 함수 호출
 파이썬에서는 모든 것들이 객체입니다. 따라서, 함수 이름 자체는 함수 객체의 레퍼런스를 지닙니다. 아래와 같이 참조 값을 복사해서 사용할 수 있습니다. 함수 호출은 함수 이름(인자)의 형태로 사용합니다.
----------------------------------------------------------------------------------------
# F_change 함수 정의
def F_change(a):
    print '썹씨를 화씨로 변환합니다.'
    print a*1.8+32
# F_change 함수 호출
F_change(15)

# a변수에 F_change 함수 레퍼런스를 복사한 후에 a변수를 이용해 F_change 함수 호출
a=F_change
a(15)
----------------------------------------------------------------------------------------
(실행 결과)
썹씨를 화씨로 변환합니다.
59.0
썹씨를 화씨로 변환합니다.
59.0
----------------------------------------------------------------------------------------

2) 인수 값 전달 방법
 다른 프로그래밍 언어를 공부해보신 분들은 아시겠지만, 인수를 전달하는 방식에는 값 전달 방식(Call-by-Value) 참조에 의한 호출 방식(Call-by-Reference)이 있습니다. 파이썬에서는 기본적으로 값 전달 방식이지만, 실제로는 참조에 의한 호출의 형태입니다.

3) 반환문
 return문을 사용해서 값을 반환하는데, return문이 없는 함수도 none객체가 반환이 됩니다. 두 개 이상의 값을 반환할 때에는 튜플로 반환됩니다. 
----------------------------------------------------------------------------------------
# 리턴 값을 튜플의 형태로 사용했을 때
def swap(a,b):
    return (b,a)

print swap(10,20)

# 리턴 값을 콤마(,)로만 사용했을 때
def swap2(a,b):
    return b,a

print swap2(10,20)
----------------------------------------------------------------------------------------
# 튜플의 특성으로 괄호를 사용하지 않으면 기본적으로 튜플이 됨
(실행 결과)
(20, 10)
(20, 10)
----------------------------------------------------------------------------------------

 추가적으로 인자에 대한 자료형 결정은 호출을 할 때 자료형의 타입에 따라 자료형이 결정됩니다.

- 함수의 인수처리

 
1)  기본 인자
 함수를 호출할 때 인수를 넘겨주지 않아도 인수가 가지는 값으로 기본 인수 값이라고 합니다. 일반 인자와 기본 인자가 같이 있다면 기본 인자는 가장 뒤에 와야 합니다. 함수를 호출할 때 인자가 있다면 호출할 때 사용한 인자를 더 우선합니다.
----------------------------------------------------------------------------------------
def add_10(a,b=10):
    return a+b
print add_10(15)   # 인자를 입력하지 않으면 기본인자와 연산
print add_10(15,9) # 기본인자보다 입력한 인자 9를 더 우선
----------------------------------------------------------------------------------------
(실행 결과)
25
24
----------------------------------------------------------------------------------------

2) 키워드 인수
 키워드 인수는 인자 값 전달시에 이름과 값을 전달하는 방식입니다. 키워드 인수 역시 기본 인자처럼 가장 마지막에 와야 합니다.
----------------------------------------------------------------------------------------
def area(width, column):
    return width*column

print area(20,column=5) # 이름과 값 전달
----------------------------------------------------------------------------------------
(실행 결과)
100
----------------------------------------------------------------------------------------

3) 가변 인수 리스트
 가변 인수는 변수 이름 앞에 *를 붙여서 사용합니다. 튜플 형태로 반환되며, 호출할 때 여러 개의 인자를 사용해도 튜플 형태로 반환해줍니다.
----------------------------------------------------------------------------------------
def var(a,*arg):
    print a,arg
    
var(1)
var(1,2)
var(5,6,7,8,9)
----------------------------------------------------------------------------------------
(실행 결과)
1 ()
1 (2,)
5 (6, 7, 8, 9)
----------------------------------------------------------------------------------------

 가변 인수를 사용하면 C언어 printf 함수와 유사하게 출력이 가능합니다.
----------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

def printf(format, *args):
    print format % args

printf("파이썬을 %d시간 공부하고, 운동을 %d분 했다.",2,30)
----------------------------------------------------------------------------------------
(실행 결과)
파이썬을 2시간 공부하고, 운동을 30분 했다.
----------------------------------------------------------------------------------------

출처 한국기술교육대학교 온라인평생교육원 파이썬프로그래밍



'언어 > Python' 카테고리의 다른 글

[파이썬] 람다 함수  (1) 2017.03.08
[파이썬] 디렉토리 다루기  (0) 2017.02.25
[파이썬] 파일 다루기  (0) 2017.02.24
[파이썬] 파일 입·출력  (0) 2017.02.22
[파이썬] 사전  (0) 2017.02.19

+ Recent posts