[파이썬 입문] 4. 함수 – 1) 함수 개요

함수 기본 구조

함수는 자주 사용하는 기능을 정의하여 필요할 때 호출하여 사용하는 핵심 문법입니다.

함수를 만들 때는 def 키워드로 시작하여 함수명과 입력 매개변수 목록 및 수행할 구문을 정의합니다.

def 함수명([입력 매개변수 목록]):

    수행할 일

다음은 두 개의 인자를 전달받아 더한 값을 반환하는 함수를 정의한 코드입니다.

[In]
def addxy(x,y):
  return x+y

이렇게 정의한 함수는 함수 호출을 통해 사용할 수 있어요.

함수 호출할 때는 함수명과 입력 인자를 전달합니다.

함수명([입력 인자 목록])

다음은 addxy 함수를 호출하여 사용하는 코드입니다.

[In]
print(addxy(2,3))
print(addxy(1,3))
print(addxy(2,5))
[out]
5
4
7

입력 매개변수

함수의 입력 매개변수는 선택 사항입니다.

자주 사용하는 코드를 함수로 정의한 후 필요할 때 호출하여 사용하기 위해 입력 매개변수가 없게 정의할 수도 있습니다.

다음은 one 을 출력하는 간단한 함수입니다. 이 함수는 설명을 위한 것이지 특별한 의미를 지니고 있지 않습니다.

[In]
def print_one():
  print("one")

위 함수를 호출할 때는 입력 인자없이 함수 이름과 호출을 의미하는 소괄호만 사용합니다.

[In]
print_one()
print_one()
print_one()
[out]
one
one
one

입력 매개변수가 있을 때 인자 개수와 순서를 맞춰서 전달하는 것이 기본입니다.

다음은 인자 전달 개수를 확인하기 위해 정의한 함수입니다.

하는 일은 출력할 메시지와 출력 횟수를 입력 인자로 전달받아 출력하는 함수입니다.

[In]
def printn(message, n):
  for _ in range(n):
    print(message,end=' ')
  print()

다음처럼 입력 인자 개수와 순서를 제대로 전달하면 잘 동작합니다.

[In]
printn("Hello",4)
[out]
Hello Hello Hello Hello 

하지만 전달할 인자 개수가 부족하면 TypeError가 발생합니다.

[In]
printn("Hello")
[out]
TypeError                                 Traceback (most recent call last)
<ipython-input-9-5e543b7da080> in <module>()
----> 1 printn("Hello")

TypeError: printn() missing 1 required positional argument: 'n'

전달할 인자 개수가 너무 많아도 TypeError가 발생합니다.

[In]
printn("Hello",4,5)
[out]
TypeError                                 Traceback (most recent call last)
<ipython-input-10-e8119941e3b8> in <module>()
----> 1 printn("Hello",4,5)

TypeError: printn() takes 2 positional arguments but 3 were given

디폴트 매개변수, 가변 매개변수

입력 매개변수에는 디폴트 값을 지정하는 디폴트 매개변수가 있습니다.

다음은 원의 면적을 출력하는 함수입니다.

반지름은 일반 입력 매개변수이며 호도(radian)는 2PI로 디폴트 값을 지정하였습니다.

[In]
def print_area(radius, radian=2*3.14):
  print(f'area:{radius*radius*radian/2}')

디폴트 매개변수도 호출할 때 값을 전달하여 사용할 수 있습니다.

[In]
print_area(1,3.14)
[out]
area:1.57

디폴트 매개변수 값을 전달하지 않으면 디폴트 설정 값으로 동작합니다.

[In]
print_area(1)
[out]
area:3.14

두 개 이상 디폴트 매개변수가 있을 때에 어떠한 변수에 어떠한 값을 전달할 것인지 명시하여 전달할 수 있습니다.

이 때 디폴트 매개변수의 전달 순서는 바뀌어도 잘 동작합니다.

[In]
def foo(a,b=0,c=1):
  print(f"a:{a} b:{b} c:{c}")

foo(2)
foo(2,b=2)
foo(2,c=2)
foo(2,c=2,b=4)
[out]
a:2 b:0 c:1
a:2 b:2 c:1
a:2 b:0 c:2
a:2 b:4 c:2

가변 입력 매개변수는 입력 매개변수의 개수가 정해져 있지 않음을 의미합니다.

입력 매개변수 이름 앞에 *를 붙여 가변 입력 매개변수를 표시합니다.

[In]
def fun_varvar(*args):
  for arg in args:
    print(arg)

fun_varvar(1,2,3,'Hello')
[out]
1
2
3
Hello

리턴

함수는 수행 결과를 반환(return)할 수 있습니다.

결과 값을 반환할 때는 return 뒤에 값을 표현합니다.

다음은 입력 인자로 전달받은 목록의 요소 합계를 구하여 반환하는 함수와 이를 호출하여 사용하는 코드입니다.

[In]
def getsum(ls):
  s = 0
  for e in ls:
    s += e
  return s

s = getsum([1,4,2,3])
print(s)  
[out]
10

return 문은 단순히 함수를 끝내기 위한 목적으로도 사용할 수 있습니다.

다음은 양수가 아닌 수를 만났을 때 함수를 바로 끝내기 위해 return문을 사용한 함수입니다.

[In]
def soo(num):
  print('soo 1')
  if num>0:
    print(num)
  else:
    return
  print('soo 2')  

양수를 전달하면 함수 끝까지 동작합니다.

[In]
soo(4)
[out]
soo 1
4
soo 2

양수가 아닌 수를 전달하면 return 문을 만나 중간에 끝납니다.

[In]
soo(-1)
[out]
soo 1