파이썬에서 함수는 어떤 작업을 수행하는 코드를 모아 이름을 붙인 것이다. 그래서 함수는 처음 한 번만 작성해 놓으면 나중에 필요할 때 계속 불러 쓸 수 있다.
즉, 함수를 사용하면 이런 점이 좋다.
어떤 작업을 수행하는 코드를 모아 이름을 붙이는 것을 함수 정의라고 하며, 함수의 이름을 불러 함수의 내용을 실행시키는 것을 함수 호출이라고 한다.
파이썬의 기본 기능의 상당수가 함수의 형태로 제공된다. 아래의 함수를 실행할 때 어떤 방법을 썼는지 떠올려 보자.
함수 이름 뒤에 괄호를 열고 닫으면 그 이름의 함수가 실행된다. 괄호 속에는 함수에 전달할 데이터를 써 넣기도 한다. 이것이 함수 호출이다.
함수가 출력한 데이터를 보관해 둘 때는 name = input()처럼 함수의 반환값을 변수에 대입하면 된다.
함수를 호출하면 다음 순서로 함수가 실행된다.
파이썬에서 함수를 정의할 때는 def 문을 사용한다. 여기서 def는 정의하다(define)에서 따온 키워드이다.
def 함수이름():
본문 # 함수를 호출했을 때 실행할 코드 블록
# 함수 정의하고 호출하기
def hello():
print('Hello, world!')
hello()
Hello, world!
파이썬에서는 함수를 정의할 때 함수에 관한 설명을 작성해 둘 수 있다. 이 설명을 독스트링(Docstring)이라고 한다. 독스트링은 def 문에서 헤더 행(함수 이름이 있는 첫 번째 행) 바로 다음 행에 큰따옴표 세 개(“”“)로 감싸 적는다.
def order():
"""사용자로부터 주문할 음료를 입력받아,
주문 사항을 화면에 출력한다."""
print('주문하실 음료를 알려주세요')
drink = input()
print(drink, '주문하셨습니다.')
함수에 전달된 데이터를 대입하기 위한 변수를 매개변수(parameter)라고 부른다. 함수에 전달하는 데이터 자체는 인자(argument)라고 부른다. 즉, 함수를 호출하면 함수에 전달한 인자(데이터)가 함수 속의 매개변수에 대입된다.
def 함수이름(매개변수):
함수의 내용
함수는 여러 개의 인자를 전달받을 수도 있다. 함수를 호출할 때, 인자·매개변수의 개수·순서가 서로 같아야 한다.
def 함수이름(매개변수1, 매개변수2):
함수의 내용
def print_order(drink, cake): # 콤마(,)로 구분해 매개변수 여러 개 정의
"""음료(drink)와 케익을(cake)를 전달받아,
주문 내용을 화면에 출력한다."""
print('음료:', drink, '/', '케익:', cake)
print_order('카페라테', '치즈케익') # 함수에 여러 개의 인자를 전달하여 호출하기
print_order('당근케익', '우유') # 전달하는 인자의 순서에 주의하자!
음료: 카페라테 / 케익: 치즈케익
음료: 당근케익 / 케익: 우유
함수를 호출할 때 인자를 생략하고 싶다면, 매개변수에 값이 전달되지 않았을 때 사용할 기본값(default value)을 정의해 두면 된다.
def 함수이름(매개변수=값):
코드
단, 매개변수에 값을 전달할 때는 위치를 기준으로 하기 때문에 더 앞에 있는 매개변수에 기본값을 지정했다면 뒤에 있는 변수에도 기본값을 지정해야 한다. 그렇지 않으면 함수를 호출할 때 어떤 매개변수를 생략한 것인지 알 수 없게 되기 때문이다.
# 매개변수 기본값을 잘못 정의한 경우
>>> def multiply(a=2, b): # 첫번째 매개변수에만 기본값을 정의했다
... """a와 b의 곱을 계산한다."""
... return a * b
...
SyntaxError: non-default argument follows default argument
함수를 호출할 때 매개변수=값
의 형태로 매개변수에 할당할 값을 명시할 수 있다. 이렇게 하면 기본값이 있는 다른 매개변수의 값을 생략하고 매개변수의 위치도 바꾸어 호출할 수 있다.
>>> def 동전계산(오백원=0, 백원=0, 오십원=0, 십원=0):
... """동전의 개수를 입력받아 돈의 합계를 계산한다."""
... return 오백원 * 500 + 백원 * 100 + 오십원 * 50 + 십원 * 10
...
>>> 동전계산() # 기본값은 모두 0
0
>>> 동전계산(1, 10, 0, 100) # 값을 순서대로 전달
2500
>>> 동전계산(십원=220) # 십원짜리만 220개
2200
>>> 동전계산(백원=3, 오십원=2) # 백원 3개, 오십원 2개
400
>>> 동전계산(백원=9, 오백원=10) # 백원 9개, 오백원 10개
5900
함수가 만들어낸 데이터를 함수를 호출한 지점으로 되돌려주는 것을 ‘함수가 값을 반환한다’라고 말한다.
함수가 값을 반환하도록 하려면 return 문을 사용하면 된다. return 문을 실행하면 함수의 실행이 종료되고, 지정한 값이 함수가 호출된 지점으로 반환된다. (return에 값을 지정하지 않으면 None을 반환한다.)
def 함수이름:
함수의 내용
return 반환값
함수에서 값을 여러 개 반환할 때는 다음과 같이 return에 값이나 변수를 ,(콤마)로 구분해서 지정하면 된다.
def 함수이름:
함수의 내용
return 반환값1, 반환값2
def price(num_drink):
"""음료의 잔 수(num_drink)을 전달받아,
가격을 반환한다."""
price_per_drink = 2500
total_price = num_drink * price_per_drink
return total_price # 계산한 값 반환하기
result = price(3) # 함수 호출하고 반환값 저장하기
print('가격:', result)
가격: 7500
두 가지 출력을 구별하자
함수는 데이터를 화면에 출력하기도 하고, 함수 바깥으로 출력하기도 한다. 둘 다 ‘출력(output)’이라고 불리곤 하지만, 정확하게 표현하면 전자는 ‘프린트(print)’이고, 후자는 ‘반환(return)’이다. 프린트는 데이터를 사람에게 보여주기 위한 것이다. 반환은 프로그램의 진행을 위해 계산 결과를 함수를 호출한 지점으로 전달하는 것이다.
return 문은 함수의 값을 반환할 때 뿐 아니라 함수의 실행을 종료시킬 때도 쓸 수 있다. 보통은 if와 조합해서 특정 조건일 때 함수 중간에서 빠져나온다.
>>> def not_ten(a):
... if a == 10:
... return
... print(a, '입니다.', sep='')
...
>>> not_ten(5)
5입니다.
>>> not_ten(10)
>>>
본 포스팅은 아래의 사이트를 참고하여 작성되었습니다.
연오의 파이썬 https://python.bakyeono.net/chapter-6.html
코딩도장 https://dojang.io/