함수는 메서드(method)라고도 합니다.
함수는 코드의 다른 위치에서 여러 번 실행해야 하는 코드를 다른 데이터로 캡슐화하는 데 사용됩니다. 예를 들어 코드에서 함수 없이 복잡한 수학 공식을 여러 번 구현하려면 공식을 여러 번 구현하는 코드를 작성해야 합니다. 함수를 사용하면 수식을 구현하는 코드를 한 번만 작성하면 해당 코드를 실행해야 할 때마다 단일 명령으로 함수를 호출할 수 있습니다.
함수를 사용하면 많은 코드 줄을 절약할 수 있을 뿐만 아니라 사용성을 높일 수 있습니다. 한 응용 프로그램에 정의된 기능은 수정 여부에 관계없이 다른 응용 프로그램에서 사용할 수 있습니다. 마지막으로, 함수는 객체 지향 프로그래밍의 필수적인 부분입니다.
함수를 정의하려면 def 키워드를 사용하고 그 뒤에 함수 이름과 한 쌍의 괄호를 사용할 수 있습니다. 예를 들어, 다음 스크립트는 my_function()이라는 함수를 정의합니다. 이 함수는 콘솔에 간단한 문자열을 출력합니다.
def my_function():
print("This is my first function")
함수 내에서 코드를 실행하려면 함수를 호출해야 합니다. 함수를 호출하려면 함수 이름 뒤에 괄호 쌍을 지정해야 합니다. 다음 스크립트는 my_function() 함수를 호출합니다.
# calling the my_function() function
my_function()
Output:
This is my first function
다음 스크립트는 구구단의 7단을 출력하는 함수를 만들고 함수를 호출하여 출력하는 예제입니다.
def print_seven():
for i in range(1, 10):
print("7 x ", str(i), " = ", str(7*i))
print_seven()
Output:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
매개변수화된 함수
매개변수화된 함수는 데이터를 전달할 수 있는 함수입니다. 함수에 전달된 데이터를 저장할 변수를 함수 매개변수라고 하며 괄호 안에 정의됩니다. 예를 들어 다음 함수에는 message라는 매개변수가 하나 있습니다. 이 매개변수에 값을 전달하면 for 루프를 사용하여 출력이 5번 표시됩니다.
def show_message(message):
for _ in range(5):
print(message)
show_message("function test")
Output:
function test
function test
function test
function test
function test
함수에 여러 매개변수를 전달할 수도 있습니다. 예를 들어, 다음 함수는 message 및 count라는 두 개의 매개변수를 사용합니다. message 매개변수에 전달된 값은 count 매개변수에 전달된 값의 횟수만큼 콘솔에 인쇄됩니다. count 매개변수에 3을 입력하였으므로 message가 3번 출력됩니다.
def show_message(message, count):
for _ in range(count):
print(message)
show_message("function test", 3)
Output:
function test
function test
function test
매개변수화된 함수의 또 다른 예를 살펴보겠습니다. 다음 스크립트는 add_numbers()라는 이름의 함수를 정의합니다. 이 함수는 세 개의 매개변수 값을 계산하고 그 합계를 콘솔에 출력합니다. 3개의 매개변수에 각각 a=3, b=2, c=3을 입력하면 3개를 합산하여 출력합니다.
def add_number(a, b, c):
result = a + b + c
print(result)
add_number(3, 2, 3)
Output:
8
마지막으로 다음 스크립트는 display_table() 함수에 매개변수로 전달된 숫자의 구구단을 출력하는 display_table() 함수를 정의하고 매개변수로 3을 입력하고 display_table(3)을 호출하였습니다.
def print_table(num):
for i in range(1, 10):
print(str(num), " x ", str(i), " = ", str(num*i))
print_table(3)
Output:
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
함수로부터 리턴값을 반환(리턴)하는 방법
함수에 값을 전달할 수 있는 것처럼 함수도 값을 반환할 수 있습니다. 함수에서 값을 반환하지 않으면 함수의 결과를 저장하는 변수에 null 값이 저장됩니다. 예를 들어 다음 스크립트를 실행하면 add_numbers() 함수가 실행되고 출력에 숫자 8이 출력됩니다.
def add_number(a, b, c):
result = a + b + c
print(result)
result = add_number(3, 2, 3)
숫자 8은 add_number()함수 내에서 print()함수로 출력한 결과입니다. 함수 외부에 정의된 결과 변수인 result에는 저장되지 않습니다. 결과 변수의 값을 출력해 보면 None입니다.
def add_number(a, b, c):
result = a + b + c
print(result)
result = add_number(3, 2, 3)
print(result)
Output:
8
None
함수가 값을 반환하게 하려면 return 키워드를 사용해야 합니다. 반환될 값은 return 키워드 다음에 옵니다. 예를 들어 다음 스크립트에서 add_numbers() 메서드는 결과 변수에 저장된 값을 함수 호출에 반환합니다. 함수 외부에 정의된 결과를 출력해보면 result에 8이 담겨있는 것을 확인할 수 있습니다.
def add_number(a, b, c):
result = a + b + c
return result
result = add_number(3, 2, 3)
print(result)
Output:
8
함수가 여러 값을 반환하도록 만들 수도 있습니다. 값은 튜플 형식으로 반환됩니다. 다음 스크립트는 3개의 매개변수 값을 입력하고 3개의 리턴값을 출력하는 예제입니다.
def add_number(a, b, c):
result_a = a * 3
result_b = b * 3
result_c = c * 3
return result_a, result_b, result_c
x, y, z = add_number(3, 2, 3)
print(x)
print(y)
print(z)
Output:
9
6
9
매개변수 입력값이 몇 개가 될지 모를 경우 처리하는 방법
매개변수에 *를 사용하면 매개변수로 몇 개를 입력해도 상관없습니다. 매개변수 이름 앞에 *를 붙이면 입력값을 전부 모아서 튜플로 만들어 줍니다. 다음 스크립트는 add_many(*args)함수를 정의하고 매개변수에 3, 2, 3을 입력하고 함수를 호출하였습니다.
def add_many(*args):
result = 0
for i in args:
result = result + i
return result
result = add_many(3, 2, 3)
print(result)
Output:
8
add_many()를 호출시에 입력으로 10개를 사용하더라도 add_many(*args)로 가능합니다.
def add_many(*args):
result = 0
for i in args:
result = result + i
return result
result = add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(result)
Output:
55
키워드 파라메터
매개변수 앞에 별 두개(**)를 붙이면 입력값을 딕셔너리로 만들어줍니다. 다음 스크립트를 참조하시면 됩니다.
def print_kwargs(**kargs):
for i in kargs:
print(i, " = ", kargs[i])
print_kwargs(a=3, b = 3)
Output:
a = 3
b = 3
전역 변수와 로컬 변수 그리고 함수
정의된 위치에 따라 Python 변수 및 함수는 전역 및 로컬의 두 가지 유형으로 나눌 수 있습니다. 함수나 클래스 외부에 정의된 변수를 전역 변수라고 합니다. 전역 변수는 어디에서나 액세스할 수 있습니다. 반면에 지역 변수는 함수 내부에 정의됩니다. 지역 변수는 함수 내에서만 접근할 수 있습니다. 다음 스크립트는 하나의 전역 변수 num1과 하나의 지역 변수 num2를 정의합니다. num1 변수는 add_ten() 함수 내에서 액세스할 수 있습니다. 함수 내부에 num1 및 num2 변수가 추가됩니다.
# global variable
num1 = 7
def add_ten():
# local variable
num2 = 3
result = num2 + num1
print(result)
add_ten()
위의 스크립트를 실행하면 add_ten() 함수 내부를 포함한 모든 곳에서 전역 변수 num1에 액세스할 수 있기 때문에 오류가 발생하지 않는 것을 볼 수 있습니다.
Output:
15
다음 스크립트에서는 add_ten() 함수 외부에서 전역 변수 num1과 지역 변수 num2에 모두 액세스하려고 합니다.
# global variable
num1 = 7
def add_ten():
# local variable
num2 = 3
result = num2 + num1
print(result)
add_ten()
print(num1)
print(num2)
출력에서 num2 변수가 정의되지 않았다는 오류가 표시됩니다. 이는 num2 변수가 add_ten() 함수 내부의 지역 변수이고 Python 인터프리터가 add_ten() 함수 외부에서 이를 찾을 수 없기 때문입니다.
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-33-129c9a7c52f3> in <module>()
10 add_ten()
11 print(num1)
---> 12 print(num2)