파이썬 함수

1. 파이썬 함수의 기본

파이썬의 함수는 일급 객체(first-class objects)로 취급되어 변수에 할당하거나 다른 함수의 인자로 전달하는 등 다양한 방식으로 활용할 수 있다.

 

1.1. 함수 정의하기

파이썬에서 함수는 def 키워드를 사용하여 정의한다.

함수명은 스네이크 케이스(snake_case)로 작성하며, 함수 뒤에 소괄호와 콜론을 붙이고 내용을 작성하는 것이 PEP 8 스타일 가이드의 권장사항이다.

 

ex)

def greet_user():
    print("안녕하세요!")

# 함수 호출
greet_user()  # 출력: 안녕하세요!

 

1.2. 매개변수와 인자

함수에 데이터를 전달하기 위해 매개변수(parameter)를 사용한다.

파이썬에서는 매개변수에 자료형을 명시하지 않고 변수명만 기입한다.

 

ex)

def greet_user(username):
    print(f"안녕하세요, {username}님!")

# 함수 호출 시 인자(argument) 전달
greet_user("무무")  # 출력: 안녕하세요, 무무님!

 

여러 매개변수를 사용할 때는 쉼표로 구분한다.

 

ex)

def describe_pet(animal_type, pet_name):
    print(f"저는 {animal_type}인 {pet_name}를 키우고 있습니다.")

# 위치 인자로 호출
describe_pet("강아지", "무무")  # 출력: 저는 강아지인 무무를 키우고 있습니다.

 

1.3. 반환값 (return)

함수는 return 키워드를 사용하여 값을 반환할 수 있다.

파이썬에서는 단일값 또는 튜플 형태로 여러 값을 반환할 수 있다.

return 문이 없는 함수는 None을 반환한다.

 

ex)

# 단일값 반환
def add_numbers(a, b):
    """두 숫자를 더하여 결과를 반환하는 함수"""
    return a + b

result = add_numbers(5, 3)
print(result)  # 출력: 8

# 여러 값 반환 (자동으로 튜플로 반환됨)
def get_dimensions():
    """가로, 세로, 높이 값을 반환하는 함수"""
    return 100, 50, 30

width, height, depth = get_dimensions()
print(f"가로: {width}, 세로: {height}, 높이: {depth}")  # 출력: 가로: 100, 세로: 50, 높이: 30

 

 

2. 함수 인자의 전달 방식

파이썬은 함수 인자를 전달하는 여러 방식을 제공한다.

 

2.1. 위치 인자

함수 정의에서 지정한 순서대로 인자를 전달하는 방식이다.

위치 인자는 순서가 중요하므로, 매개변수의 순서를 정확히 알고 있어야 한다.

 

ex)

def make_pizza(size, topping):
    """피자 주문 정보를 출력하는 함수"""
    print(f"{size}인치 피자에 {topping} 토핑을 추가합니다.")

# 순서대로 인자 전달
make_pizza(12, "페퍼로니")  # 출력: 12인치 피자에 페퍼로니 토핑을 추가합니다.

 

2.2. 키워드 인자

인자 이름을 명시적으로 지정하여 전달하는 방식이다.

키워드 인자를 사용하면 인자의 순서에 상관없이 값을 전달할 수 있다.

 

ex)

def make_pizza(size, topping):
    """피자 주문 정보를 출력하는 함수"""
    print(f"{size}인치 피자에 {topping} 토핑을 추가합니다.")

# 키워드 인자 사용
make_pizza(topping="치즈", size=16)  # 출력: 16인치 피자에 치즈 토핑을 추가합니다.

 

2.3. 기본값 매개변수

함수 정의 시 매개변수에 기본값을 지정할 수 있다.

기본값이 있는 매개변수는 함수 정의에서 기본값이 없는 매개변수 뒤에 위치해야 한다.

 

ex)

def make_pizza(size, topping="치즈"):
    """피자 주문 정보를 출력하는 함수"""
    print(f"{size}인치 피자에 {topping} 토핑을 추가합니다.")

# 기본값 사용
make_pizza(14)  # 출력: 14인치 피자에 치즈 토핑을 추가합니다.
# 기본값 대신 다른 값 전달
make_pizza(14, "페퍼로니")  # 출력: 14인치 피자에 페퍼로니 토핑을 추가합니다.

 

2.4. 가변 인자 (*args)

정확한 인자 개수를 모를 때 *를 사용하여 가변 인자를 정의할 수 있다.

가변 인자를 사용하면 함수 호출 시 여러 개의 인자를 전달할 수 있으며, 함수 내에서 튜플로 처리된다.

ex)

def make_pizza(size, *toppings):
    """피자 크기와 여러 토핑을 출력하는 함수"""
    print(f"{size}인치 피자에 다음 토핑을 추가합니다:")
    for topping in toppings:
        print(f"- {topping}")

# 여러 인자 전달
make_pizza(16, "페퍼로니")
# 출력:
# 16인치 피자에 다음 토핑을 추가합니다:
# - 페퍼로니

make_pizza(18, "치즈", "버섯", "올리브", "피망")
# 출력:
# 18인치 피자에 다음 토핑을 추가합니다:
# - 치즈
# - 버섯
# - 올리브
# - 피망

 

2.5. 키워드 가변 인자 (kwargs)**

이름-값 쌍의, 개수를 모를 때 **를 사용하여 키워드 가변 인자를 정의할 수 있다.

키워드 가변 인자는 함수 내에서 딕셔너리로 처리된다.

ex)

def build_profile(first, last, **user_info):
    """사용자 프로필을 생성하는 함수"""
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last

    for key, value in user_info.items():
        profile[key] = value

    return profile

# 추가 키워드 인자 전달
user = build_profile('김', '무무', 
                     location='서울',
                     field='IT',
                     age=7)
print(user)
# 출력: {'first_name': '김', 'last_name': '무무', 'location': '서울', 'field': 'IT', 'age': 7}

 

 

3. 변수의 범위와 수명

파이썬에서 변수는 정의된 위치에 따라 접근 범위가 결정된다.

 

3.1. 지역 변수

함수 내에서 정의된 변수는 함수 내부에서만 사용 가능하다.

 

ex)

def calculate_sum(numbers):
    """리스트의 합계를 계산하는 함수"""
    total = 0  # 지역 변수
    for number in numbers:
        total += number
    return total

result = calculate_sum([1, 2, 3, 4, 5])
print(result)  # 출력: 15
# print(total)  # 오류 발생: 'total'은 함수 외부에서 접근 불가

 

지역 변수는 함수 호출이 끝나면 메모리에서 제거된다.

 

3.2. 전역 변수

함수 외부에서 정의된 변수는 프로그램 전체에서 접근할 수 있다.

함수 내에서 전역 변수를 사용할 때는 일반적으로 읽기만 가능하다.

 

ex)

message = "안녕하세요!"  # 전역 변수

def greet():
    """인사 메시지를 출력하는 함수"""
    print(message)  # 전역 변수 읽기

greet()  # 출력: 안녕하세요!

 

3.3. global 키워드

함수 내에서 전역 변수를 수정하려면 global 키워드를 사용해야 한다.

 

ex)

counter = 0  # 전역 변수

def increment():
    """카운터를 증가시키는 함수"""
    global counter  # 전역 변수를 사용하겠다고 선언
    counter += 1

print(f"호출 전: {counter}")  # 출력: 호출 전: 0
increment()
print(f"한 번 호출 후: {counter}")  # 출력: 한 번 호출 후: 1
increment()
print(f"두 번 호출 후: {counter}")  # 출력: 두 번 호출 후: 2

 

 

3.4. nonlocal 키워드

중첩 함수에서 외부 함수의 변수를 수정하려면 nonlocal 키워드를 사용한다.

 

ex)

def outer_function():
    """외부 함수"""
    count = 0  # 외부 함수의 지역 변수

    def inner_function():
        """내부 함수"""
        nonlocal count  # 외부 함수의 변수를 사용하겠다고 선언
        count += 1
        print(f"내부 함수에서 count: {count}")

    inner_function()
    print(f"외부 함수에서 count: {count}")

outer_function()
# 출력:
# 내부 함수에서 count: 1
# 외부 함수에서 count: 1

'학습 > Python' 카테고리의 다른 글

파이썬 클래스  (0) 2025.05.02
파일 입출력  (0) 2025.04.30
표준 입출력 및 문자열 포맷팅  (0) 2025.04.29
조건문, 반복문  (1) 2025.04.25
자료구조  (0) 2025.04.19