[Python 입문 강좌 - 15] 파이썬 함수 정리 및 사용법

 

더보기

 


1. 함수란?

 

함수는 입력값을 받아 출력값을 반환하는 코드의 묶음입니다. 함수를 사용하면 같은 기능을 반복해서 구현할 필요가 없으므로 코드를 간결하게 유지할 수 있습니다. 또한 함수를 사용하면 코드를 모듈화할 수 있습니다. 함수를 파일에 저장하고 다른 코드에서 불러와 사용할 수 있으므로, 프로그램의 크기와 복잡도를 줄일 수 있습니다.

 

파이썬에서 함수는 다음과 같은 구조를 가지고 있습니다. def와 함수 이름, 그리고 함수의 본문을 이용하여 정의합니다. 함수에서 인자는 함수의 정의 부분에서 정의하며, 함수에서 반환하는 값은 return을 이용하여 반환합니다. 함수를 호출할 때는 함수 이름과 인자를 함께 사용합니다. 반환 값이 있는 경우 반환된 값을 변수에 할당 할 수 있습니다.

 

>>> def 함수이름(인자1, 인자2, ...):
... 	# 함수의 본문
... 	# return 반환값
    
>>> 변수 = 함수이름(인자1, 인자2, ...) #함수 호출

 


아래 코드는 두 개의 숫자를 입력받아 덧셈을 수행하는 함수의 예시 코드입니다. add함수는 인자 a와 b를 입력받아 두 인자를 더한 결과를 반환합니다. 함수를 호출하면 인자(3, 4)를 받아 덧셈을 수행하고 결과 값 7을 반환해줍니다.

 

>>> def add(a, b):
...     result = a + b
...     return result

>>> print(add(3, 4)) # 출력 : 7

 


함수에서 반환값을 지정하지 않을 수도 있습니다. 이 경우 함수는 None 값을 반환합니다. 아래 코드에서 print_hello 함수는 반환값을 지정하지 않아, 단순히 Hello World를 출력합니다. 

 

>>> def print_hello():
...     print("Hello, World!")

>>> print_hello() # 출력 : Hello, World!

 


함수에서 반환값을 여러 개의 값으로 지정할 수 있습니다. 반환 된 값은 튜플 형태로 반환됩니다. 아래 코드에서 get_name_and_age 함수는 input 함수를 이용하여 사용자로부터 이름과 나이를 입력받습니다. 그리고 반환값으로 이름과 나이를 튜플 형태로 반환합니다.

 

>>> def get_name_and_age():
...    name = input("이름을 입력하세요: ")
...    age = int(input("나이를 입력하세요: "))
...    return name, age

>>> result = get_name_and_age()
>>> print(result) #출력 : ('Alice', 20)

 


함수 내부에서 함수를 정의할 수도 있습니다. 이를 중첩 함수(Nested Function)라고 합니다. 아래 코드에서 outer_func 함수는 인자 a와 b를 입력받아, 내부에서 inner_func 함수를 정의하고, inner_func 함수를 호출하여 두 인자를 더한 값을 반환합니다. 

 

>>> def outer_func(a, b):
...    def inner_func(x, y):
...        return x + y
...    
...    return inner_func(a, b)

>>> result = outer_func(3, 4)
>>> print(result) # 7

 


함수를 이용하여 재귀적(Recursive)으로 코드를 작성할 수 있습니다. 재귀적 이라는 것은 함수가 자기 자신을 호출하는 것을 말합니다. 아래 코드에서 factorial 함수는 인자로 입력받은 숫자 n의 팩토리얼 값을 계산하여 반환합니다. 이때, 함수 내부에서 자기 자신을 호출합니다. 

 

>>> def factorial(n):
...    if n == 1:
...        return 1
...    else:
...        return n * factorial(n-1)

>>> result = factorial(5)
>>> print(result) # 120

 


함수 내부에서 global 키워드를 이용하여 전역 변수(Global Variable)를 참조할 수 있습니다. 이는 함수 내부에서 지역 변수(Local Variable)와 전역 변수의 이름이 같은 경우, 함수 내부에서 지역 변수가 우선적으로 참조되는 것을 방지하기 위해 사용됩니다. 아래 코드에서 increment 함수는 전역 변수 count를 참조하여 값을 1씩 증가시킵니다. 함수를 호출할 때마다 전역변수 count가 1씩 증가하고, 마지막으로 count값을 출력하면 3이 출력됩니다.

 

>>> count = 0

>>> def increment():
...    global count
...    count += 1

>>> increment()
>>> increment()
>>> increment()
>>> print(count) # 출력 : 3

 


2.파이썬 함수의 종류

2.1 내장 함수

 

파이썬에서는 이미 구현된 다양한 함수를 제공하고 있습니다. 이러한 함수를 내장 함수(built-in function)라고 부릅니다. 파이썬에서는 abs(), len(), str() 등 다양한 내장 함수를 제공합니다. 내장 함수의 종류와 사용법은 다음과 같습니다.

 

# abs() 함수: 절댓값 반환
>>> print(abs(-3)) # 3

# len() 함수: 길이 반환
>>> print(len("hello")) # 5

# str() 함수: 문자열 반환
>>> print(str(123)) # "123"

 


2.2 사용자 정의 함수

 

파이썬에서는 사용자가 직접 함수를 정의할 수 있습니다. 사용자 정의 함수는 def와 함수 이름, 그리고 함수의 본문을 이용하여 정의합니다. 

 

# 사용자 정의 함수: 두 수를 더한 값을 반환
>>> def add(a, b):
...    return a + b

# 사용자 정의 함수 호출
>>> print(add(3, 4)) # 7

 


2.3 람다 함수

 

람다 함수(lambda function)는 파이썬에서 익명 함수(이름이 없는 함수)를 만들 때 사용됩니다. 람다 함수는 lambda와 인자, 그리고 함수 본문을 이용하여 정의합니다. 람다 함수는 한 줄로 간결하게 표현할 수 있어, 특히 함수를 매개변수로 전달하는 경우에 매우 유용합니다.

 

# 람다 함수: 두 수를 더한 값을 반환
>>> add = lambda a, b: a + b

# 람다 함수 호출
>>> print(add(3, 4)) # 7

 



3. 파이썬 인자 전달 방법


함수의 인자 전달 방식에는 위치 인자, 기본값 인자, 키워드 인자, 가변 인자 등이 있습니다. 위치 인자는 함수 호출 시 순서대로 인자를 전달하는 방식입니다. 기본값 인자는 인자에 기본값을 지정하는 방식입니다. 키워드 인자는 인자에 이름을 지정하는 방식입니다. 가변 인자는 인자의 개수가 가변적인 경우 사용하는 방식입니다.

 


3.1 위치 인자 (Positional Arguments)


위치 인자는 함수 호출 시 전달되는 인자들 중에서, 인자의 순서에 따라 매개변수에 할당되는 인자를 의미합니다. 위치 인자를 사용하면 함수를 호출할 때 인자들을 순서대로 전달하여 코드를 간결하게 작성할 수 있습니다.

 

아래 코드에서 add 함수는 두 개의 매개변수 a와 b를 받습니다. 함수 호출시 인자 3과 5를 순서대로 전달하면, a에는 3이 할당되고, b에는 5가 할당됩니다. 따라서 함수 내부에서는 3+5를 계산하여 8을 반환하게 됩니다.

 

# 간단한 덧셈 함수
>>> def add(a, b):
...    return a + b

# 함수 호출 시 위치 인자 사용
>>> result = add(3, 5)
>>> print(result)  # 출력: 8

 


3.2 기본값 인자 (Default Arguments)


기본값 인자는 함수를 정의할 때 매개변수에 미리 값을 지정해 두는 것입니다. 함수 호출 시 인자를 전달하지 않으면 기본값이 사용됩니다. 이를 통해 함수를 호출할 때 일부 인자를 생략하고, 필요한 경우에만 인자를 전달하여 코드를 간결하게 작성할 수 있습니다.

 

기본값 인자는 매개변수를 정의할 때 등호(=) 기호를 사용하여 지정합니다. 주의할 점은 기본값 인자를 정의할 때, 위치 인자 뒤에 정의해야 한다는 것입니다. 즉, 기본값 인자와 위치인자를 함께 사용할 경우, 위치 인자를 먼저 정의한 후 기본값 인자를 정의해야 합니다.

 

아래 코드에서 greeting 함수는 매개변수 name과 greeting_message를 받습니다. greeting_message 매개 변수에는 기본값으로 "안녕하세요"가 지정되어 있습니다. 첫 번째 함수 호출에서는 greeting_message에 대한 인자를 전달하였고, 두 번째 함수 호출에서는 인자를 전달하지 않았습니다. 인자를 전달하지 않은 경우에는 기본값 "안녕하세요"가 사용되었습니다.

 

# 인사말 출력 함수
>>> def greeting(name, greeting_message="안녕하세요"):
...    print(f"{greeting_message}, {name}님!")

# 함수 호출 시 기본값 인자를 사용하지 않음
>>> greeting("김철수", "반갑습니다")  # 출력: 반갑습니다, 김철수님!

# 함수 호출 시 기본값 인자 사용
>>> greeting("이영희")  # 출력: 안녕하세요, 이영희님!

 


3.4 키워드 인자 (Keyword Arguments)


키워드 인자(keyword Arguments)는 함수를 호출할 때, 인자의 순서를 정확히 맞추지 않아도 되는 기능입니다. 함수의 인자를 이름과 함께 지정할 수 있어, 인자의 순서를 신경쓰지 않아도 됩니다. 이는 코드의 가독성을 높이고, 유지보수를 용이하게 합니다.

 

아래 코드에서 greet 함수는 매개변수 name과 greeting을 받습니다. 이 함수를 호출할 때, 키워드 인자를 사용하여 인자의 순서를 정확히 맞추지 않아도 문제가 없는 것을 확인할 수 있습니다.

 

>>> def greet(name, greeting="Hello"):
...    print(greeting, name)

>>> greet(greeting="Hi", name="Alice") # 출력 : Hi Alice

 


3.5 가변 인자 (Variable Arguments)


가변 인자(Variable Arguments)는 함수에서 임의의 개수의 인자를 받을 수 있게 해주는 기능입니다. 가변 인자는 매개변수 앞에 별표(*)를 붙여 정의하며, 함수 내부에서는 튜플(tuple)로 처리됩니다. 가변 인자를 사용하면 여러 개의 인자를 한 번에 전달받아 처리할 수 있어, 함수의 유연성을 높일 수 있습니다. 가변 인자를 사용할 때 주의할 점은 가변 인자는 일반 매개변수와 함께 사용할 수 있지만, 일반 매개변수가 가변 인자보다 먼저 정의되어야 한다는 것입니다.

 

아래 코드에서 sum_numbers 함수는 가변 인자 *args를 받습니다. 그리고 튜플의 모든 요소를 순회하며 합계를 구한 뒤 반환합니다.

 

# 가변 인자를 사용한 합계 함수
>>> def sum_numbers(*args):
...    total = 0
...    for number in args:
...        total += number
...    return total

# 함수 호출 시 가변 인자 사용
>>> result = sum_numbers(1, 2, 3, 4, 5)
>>> print(result)  # 출력: 15

 


3.6 키워드 가변 인자 (Keyword Variable Arguments)


키워드 가변 인자(Keyword Variable Arguments)는 함수에서 임의의 개수의 키워드 인자를 받을 수 있게 해주는 기능입니다. 매개변수 앞에 별표 두 개(**)를 붙여 정의하며, 함수 내부에서는 딕셔너리(dictionary)로 처리됩니다. 키워드 가변 인자를 사용하면 여러 개의 키워드 인자를 한 번에 전달받아 처리할 수 있어, 함수의 유연성을 높일 수 있습니다.

아래 코드에서 print_info 함수는 키워드 가변 인자 **kwargs를 받습니다. 함수 호출 시 여러 개의 키워드 인자를 전달하면, 함수 내부에서는 이들 인자가 딕셔너리로 묶여 처리됩니다.  kwargs 딕셔너리의 모든 키와 값을 순회하며 출력합니다.

 

# 키워드 가변 인자를 사용한 정보 출력 함수
>>> def print_info(**kwargs):
...    for key, value in kwargs.items():
...        print(f"{key}: {value}")

# 함수 호출 시 키워드 가변 인자 사용
>>> print_info(name="김철수", age=30, city="서울")

# 출력
#name: 김철수
#age: 30
#city: 서울

 

키워드 가변 인자는 일반 매개변수, 가변 인자와 함께 사용할 수 있습니다. 이때, 일반 매개변수와 가변 인자가 키워드 가변 인자보다 먼저 정의되어야 합니다.

 

아래 코드에서 print_mixed_info 함수는 일반 매개변수 title, 가변 인자 *args, 키워드 가변 인자 **kwargs를 함께 받습니다. 함수 호출 시 인자를 전달하면, 각각의 매개변수에 해당하는 인자들이 올바르게 할당되고 처리됩니다.

 

# 키워드 가변 인자와 일반 매개변수, 가변 인자를 함께 사용한 예제
>>> def print_mixed_info(title, *args, **kwargs):
...    print(f"제목: {title}")
...    print("내용:", end=" ")
...    for arg in args:
...        print(arg, end=" ")
...    print()
...    print("추가 정보:")
...    for key, value in kwargs.items():
...        print(f"{key}: {value}")

# 함수 호출 시 키워드 가변 인자 사용
>>> print_mixed_info("프로필", "취미", "좋아하는 음식", name="김철수", age=30, city="서울")

#출력
#제목: 프로필
#내용: 취미 좋아하는 음식 
#추가 정보:
#name: 김철수
#age: 30
#city: 서울