Python 기초

함수의 정의

파이썬에서 함수를 정의하는 문법은 아래와 같습니다.

def 함수이름 (매개변수1, 매개변수2):
    문장1
    문장2

 

  • def - 함수를 정의하는 키워드입니다.
  • 매개변수 - 외부로부터 작업에 필요한 데이터를 받으며 경우에 따라 없어도 됩니다.
  • : (콜론) - 콜론을 찍어 함수 정의가 끝나지 않았음을 표시합니다.
  • 문장 - 함수의 몸체입니다.

 

함수는 크게 헤더와 몸체로 나누어집니다. 헤더(header)는 def 키워드로 시적합니다. 이어서 함수의 이름과 매개 변수를 적어주며 끝에 콜론(:)을 찍어줍니다.

콜론을 찍어야 하는 이유는 인터프리터에게 아직 해석할 것이 남았다는 것을 알려줘야 하기 때문입니다.

함수는 몸체까지 입력되어야 비로소 해석을 시작할 수 있습니다.

매개 변수(parameter)는 외부에서 전달되는 데이터를 함수로 전달하는 변수입니다. 다음 절에서 자세하게 설명할 예정입니다.

 

함수의 몸체(body)에는 함수가 수행하는 작업을 위한 명령어들이 들어갑니다.

예를 들어 get_sum() 함수의 몸체는 정수의 합을 계산하기 위한 반복문으로 이루어져 있습니다.

합을 계산한 후에 return 키워드를 이용하여 계산 결과를 반환합니다. return이 실행되면 함수가 종료됩니다.

 

화면에 "안녕"을 출력하는 아주 간단한 함수를 작성해봅시다.

def say_hello(name):
    print("안녕, ", name)

 

함수의 이름은 say_hello()이고 name은 매개 변수입니다. 매개 변수는 외부로부터 값을 받는 특수한 변수입니다.

함수의 몸체는 print() 함수를 호출하는 문장입니다.

함수는 정의되었다고 해서 바로 실행되지 않습니다. 함수를 실행시키려면 다음과 같이 함수를 호출해야 합니다.

def say_hello(name):
    print("안녕, ", name)

say_hello("철수")

 

<실행 결과>

안녕, 철수

 

함수는 여러 개의 값을 받을 수 있습니다. 물론 그러려면 값을 받는 매개 변수도 여러 개 있어야 합니다. 매개 변수는 콤마로 구분됩니다.

def say_hello(name, msg):
    print("안녕, ", name, "야, ", msg)

 

변수를 생성한 후에 함수를 호출할 때 변수를 전달해도 됩니다.

def say_hello(name, msg):
    print("안녕, ", name, "야, ", msg)

name = "철수"
msg = "어서 집에 오너라"

say_hello(name, msg)

 

<실행 결과>

안녕, 철수야, 어서 집에 오너라

 

함수는 return 키워드를 사용해서 외부로 값을 반환할 수 있습니다.

예를 들어 정수의 합을 계산하여 반환하는 get_sum() 함수는 다음과 같이 정의할 수 있습니다.

def get_sum(start, end):
    sum = 0
    for i in range(start, end+1):
        sum += i
    return sum

 

get_sum() 함수를 호출해서 사용하는 예는 아래와 같습니다. get_sum() 함수로부터 반환된 값은 변수에 저장하거나 print()를 이용하여 출력할 수 있습니다.

def get_sum(start, end):
    sum = 0
    for i in range(start, end+1):
        sum += i
    return sum

value = get_sum(1, 10)
print(value)

value = get_sum(1, 20)
print(value)

 

<실행 결과>

55
210

 

함수를 사용하면 어떤 장점이 있을까요? 이것은 프로그래밍을 상당히 해보아야 실감할 수 있지만 대표적인 것들은 아래와 같습니다.

  • 프로그램 안에서 중복된 코드를 제거합니다.
  • 복잡한 프로그래밍 작업을 더 간단한 작업들로 분해할 수 있습니다. 각 함수들은 레고의 블록처럼 다른 함수들과 연결되어 구성됩니다.
  • 함수는 한번 만들어지면 다른 프로그램에서도 재사용될 수 있습니다.
  • 함수를 사용하면 가독성이 증대되고, 유지 관리도 쉬워집니다.

 

함수의 이름

함수 이름은 식별자에 대한 규칙만 따른다면 어떤 이름이라도 가능합니다.

다만 소스 코드를 읽기 쉽게 하기 위하여 함수의 기능을 암시하는 이름을 부여하는 것이 좋습니다.

일반적으로 함수의 목적을 설명하는 동사 또는 동사 + 명사를 사용하면 좋습니다.

아래는 함수 이름의 예입니다. 밑줄 기호(_)도 사용할 수 있습니다.

square(side)                 # 정수를 제곱하는 함수
compute_average(list)        # 평균을 구하는 함수
set_cursor_type(c)           # 커서의 타입을 설정하는 함수

 

자, 그럼 함수를 정의하였으니 함수를 사용해볼까요? :)

 

함수 호출

함수를 정의하는 목적은 함수를 사용하기 위해서입니다. 그렇다면 함수를 사용하려면 어떻게 하여야 할까요?

함수를 호출(call)하여야 합니다. 함수 호출(function call)이란 print_lines()와 같이 함수의 이름을 써주면 됩니다.

함수 안의 문장들은 호출되기 전까지는 전혀 실행되지 않습니다. 함수가 호출되면 함수 안에 있는 문장들이 호출되지 전까지는 전혀 실행되지 않습니다.

함수가 호출되면 함수 안에 있는 문장들이 순차적으로 실행되며 실행이 끝나면 호출한 위치로 되돌아갑니다.

예를 들어 functionA() 을 호출한다고 하면 아래와 같은 순서로 프로그램이 실행됩니다.

(밑의 그림은 C 언어의 문법이므로 파이썬 문법과 조금 다르지만 함수 호출 순서는 같습니다.)

 

함수는 일단 작성되면 몇 번이라도 호출이 가능합니다. 이것이 사실 함수의 가장 큰 장점입니다.

예를 들어 위의 functionA() 라는 함수가 2번 필요하다면 functionA() 함수를 2번 호출하면 되는 것입니다.

 

아래의 예제는 정수의 합을 계산하는 작업이 2번 필요한 프로그램입니다.

def get_sum(start, end):
	sum = 0

	for i in range(start, end + 1):
		sum += i

	return sum

print(get_sum(1, 10))
print(get_sum(1, 20))

 

<실행 결과>

55
210