Python / 사용자 정의 함수 만들고 호출하기

함수를 정의하고 호출하는 방법을 알아봅니다.

함수 만들기

def function_name( parameter ) :
    # code
  • function_name : 함수 이름입니다. 변수명을 만드는 규칙과 같은 규칙으로 만듭니다.
  • parameter : 인수입니다. 인수가 여러 개인 경우 쉼표(,)로 구분합니다.

함수 호출하기

function_name( parameter )

예제

Hello를 출력하는 함수를 정의합니다.

def jb_say_hello() :
    print('Hello')

함수를 호출하면 Hello가 출력됩니다.

>>> jb_say_hello()
Hello

함수를 정의하는 위치

함수는 호출하기 전에 정의되어 있어야 합니다. 만약 호출하는 코드 다음에 정의되어 있으면 에러가 납니다.

jb_say_hello()

def jb_say_hello() :
    print('Hello')
Traceback (most recent call last):
  File "C:/Users/JB/Documents/Coding/Python/function.py", line 1, in <module>
    jb_say_hello()
NameError: name 'jb_say_hello' is not defined

인수 사용하기

두 인수의 합을 구하는 함수입니다.

def jb_sum(x,y) :
    print(x+y)

x = int(input('Input x : '))
y = int(input('Input y : '))
jb_sum(x,y)

실행하면 x와 y의 값을 묻고, 값을 입력하면 합이 출력됩니다.

Input x : 1
Input y : 2
3

반환값

return으로 반환값을 정의할 수 있습니다.

def jb_sum(x,y) :
    z = x + y
    return z

x = int(input('Input x : '))
y = int(input('Input y : '))
print(jb_sum(x,y))
Input x : 1
Input y : 2
3

반환값이 여러 개인 경우

반환값이 여러 개인 경우, 첫번째 return문에서 값을 반환하고 함수를 종료합니다.

def jb_sum(x,y) :
    w = x * y
    return w
    z = x + y
    return z

x = int(input('Input x : '))
y = int(input('Input y : '))
print(jb_sum(x,y))
Input x : 1
Input y : 2
2

인수의 기본값

인수의 수와 입력한 값의 개수가 다르면 에러가 납니다.

def jb_sum(x,y) :
    z = x + y
    return z
>>> jb_sum(1)
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    jb_sum(1)
TypeError: jb_sum() missing 1 required positional argument: 'y'

인수의 기본값을 정해서 입력한 값이 없는 경우 기본값을 사용할 수 있습니다.

def jb_sum(x,y=1) :
    z = x + y
    return z
>>> jb_sum(1)
2

기본값이 있는 인수의 위치

기본값이 있는 인수는 기본값이 없는 인수 뒤에 와야 합니다.

def jb_sum(x=1,y) :
    z = x + y
    return z

위와 같이 하면 에러가 납니다.

함수 호출할 때 인수 이름 입력하기

인수의 이름을 이용해서 호출할 수 있습니다.

def jb_div(x,y) :
    z = x / y
    return z
>>> jb_div(x=10,y=5)
2.0
>>> jb_div(y=10,x=5)
0.5

인수의 이름을 넣지 않으면 순서대로 배정됩니다. 만약 중복이 생기면 에러가 납니다. 이름이 없는 인수는 이름이 있는 인수 앞에 넣어야 합니다.

def jb_sum(x,y,z) :
    return x + y + z
>>> jb_sum(1,z=2,y=3)
6
>>> jb_sum(1,x=2,y=3)
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    jb_sum(1,x=2,y=3)
TypeError: jb_sum() got multiple values for argument 'x'
>>> jb_sum(z=1,2,y=3)
SyntaxError: positional argument follows keyword argument

가변 인수

인수의 개수를 정하지 않고, 입력하는 값을 모두 인수로 사용할 수 있습니다.

*를 사용하면 튜플로 저장합니다.

def jb_x(*x) :
    print(x)
>>> jb_x('one','two','three','four')
('one', 'two', 'three', 'four')

**를 사용하면 사전으로 저장합니다.

def jb_x(**x) :
    print(x)
>>> jb_x(one=1,two=2,three=3,four=4)
{'one': 1, 'two': 2, 'three': 3, 'four': 4}