파이썬 - 함수 어노테이션: 초보자 가이드

안녕하세요, 파이썬 프로그래머를 꿈꾸는 여러분! 오늘은 우리가 흥미로운 함수 어노테이션의 세계에 빠지게 될 것입니다. 프로그래밍에 새로운 여러분이라면 걱정하지 마세요 - 저는 여러분을 단계별로 이 개념을 안내해 드릴 것입니다. 마치 저의 교육 경력 동안 수많은 학생들에게 한 것처럼요. 그럼, 좋아하는 음료를 들고 편안한 자리에 앉아, 함께 이 파이썬 모험을 떠나보세요!

Python - Function Annotations

함수 어노테이션이란 무엇인가요?

함수 어노테이션은 파이썬에서 함수 매개변수와 반환 값에 메타데이터를 추가할 수 있는 기능입니다. 이를 우리가 함수에 추가하는 작은 노트로 생각해 보세요. 이들은 함수의 작동 방식에는 영향을 주지 않지만, 문서화와 형식 검사에 매우 유용할 수 있습니다.

시작하려면 간단한 예제를 살펴보겠습니다:

def 인사하기(이름: str) -> str:
return f"안녕하세요, {이름}!"

이 예제에서, 이름 뒤에 있는 : str이름이 문자열이어야 한다는 어노테이션입니다. 끝에 있는 -> str은 함수가 문자열을 반환한다는 것을 나타냅니다.

함수 어노테이션을 왜 사용하나요?

  1. 코드를 더 읽기 쉽게 만듭니다.
  2. 다른 개발자들(및 미래의 여러분!)가 코드를 더 잘 이해할 수 있게 합니다.
  3. 형식 검사 도구들이 잠재적인 오류를 잡는 데 사용할 수 있습니다.

이제, 여러분은 다양한 유형의 어노테이션에 대해 더 깊이 탐구해 봅시다!

매개변수에 대한 함수 어노테이션

함수 매개변수에 어노테이션을 추가하여 우리가 기대하는 데이터 유형을 나타낼 수 있습니다. 다음은 예제입니다:

def 면적_계산(길이: float, 폭: float) -> float:
return 길이 * 폭

이 함수에서, 우리는 길이이 모두 float(소수점 숫자)이어야 한다고 어노테이션하고, 함수는 float을 반환한다고 표시하고 있습니다.

이를 사용해 보겠습니다:

면적 = 면적_계산(5.5, 3.2)
print(f"면적은: {면적}")

출력:

면적은: 17.6

기억해 두세요, 이 어노테이션들은 형식을 강제하지 않습니다 - 여러분은 여전히 면적_계산("안녕", "세상")를 호출할 수 있지만, 그것은 많은 의미가 없습니다!

반환형에 대한 함수 어노테이션

이미 -> float 어노테이션을 반환형으로 본 적이 있습니다만, 더 복잡한 예제를 살펴보겠습니다:

def 사용자_정보_얻기(사용자_아이디: int) -> dict:
# 이 함수가 데이터베이스에서 사용자 데이터를 가져오는 것으로 가정해 봅니다
return {
"id": 사용자_아이디,
"name": "Alice",
"age": 30,
"email": "[email protected]"
}

사용자 = 사용자_정보_얻기(12345)
print(f"User name: {사용자['name']}")

출력:

User name: Alice

이 함수에서, 우리는 사용자_아이디가 정수이고, 함수는 딕셔너리를 반환한다고 어노테이션하고 있습니다.

표현식에 대한 함수 어노테이션

어노테이션은 단순한 형식만으로 끝나지 않습니다 - 더 복잡한 표현식도 될 수 있습니다. 다음은 예제입니다:

from typing import List, Union

def 아이템_처리(아이템들: List[Union[int, str]]) -> List[str]:
return [str(아이템).upper() for 아이템 in 아이템들]

결과 = 아이템_처리([1, "안녕", 42, "세상"])
print(결과)

출력:

['1', '안녕', '42', '세상']

이 예제에서, List[Union[int, str]]은 함수가 각 항목이 정수이거나 문자열일 수 있는 목록을 기대한다는 것을 의미합니다.

기본 인수와 함께의 함수 어노테이션

우리는 어노테이션을 기본 인수와 결합할 수 있습니다. 다음은 그 방법입니다:

def 사용자_인사(이름: str = "손님") -> str:
return f"환영합니다, {이름}!"

print(사용자_인사())
print(사용자_인사("Alice"))

출력:

환영합니다, 손님!
환영합니다, Alice!

이 함수에서, 우리는 이름이 문자열이어야 하고, 이름이 제공되지 않으면 기본적으로 "손님"으로 설정되어 있다고 어노테이션하고 있습니다.

모두 합치기

이제, 다양한 어노테이션 기술을 결합한 더 복잡한 예제를 살펴보겠습니다:

from typing import List, Dict, Union

def 판매_분석(데이터: List[Dict[str, Union[str, float]]]) -> Dict[str, float]:
총_판매액 = 0.0
판매된_아이템 = 0

for 트랜잭션 in 데이터:
총_판매액 += 트랜잭션['amount']
판매된_아이템 += 1

return {
"total_sales": 총_판매액,
"average_sale": (총_판매액 / 판매된_아이템) if 판매된_아이템 > 0 else 0
}

판매_데이터 = [
{"item": "위젯 A", "amount": 10.99},
{"item": "위젯 B", "amount": 5.99},
{"item": "위젯 C", "amount": 15.99}
]

결과 = 판매_분석(판매_데이터)
print(f"총 판매액: ${결과['total_sales']:.2f}")
print(f"평균 판매액: ${결과['average_sale']:.2f}")

출력:

총 판매액: $32.97
평균 판매액: $10.99

이 예제는 우리가 어떻게 복잡한 어노테이션을 사용하여 입력 데이터와 반환 값의 구조를 설명할 수 있는지 보여줍니다.

함수 어노테이션 방법 요약

다음은 함수 어노테이션의 다양한 방법을 요약한 표입니다:

방법 예제 설명
매개변수 어노테이션 def 함수(x: int): 매개변수의 형식을 제안합니다
반환형 어노테이션 def 함수() -> str: 함수의 반환형을 제안합니다
기본 값과 어노테이션 def 함수(x: int = 0): 형식 제안과 기본 값을 결합합니다
복잡한 형식 어노테이션 def 함수(x: List[int]): typing 모듈의 형식을 사용하여 더 구체적인 형식 힌트를 제공합니다
여러 형식 (Union) def 함수(x: Union[int, str]): 매개변수가 여러 형식 중 하나일 수 있다는 것을 제안합니다

기억해 두세요, 이 어노테이션들은 힌트일 뿐입니다, 엄격한 규칙은 아닙니다. 파이썬은 여러분이 다른 형식을 사용하는 것을 막지 않지만, mypy와 같은 도구는 이 어노테이션을 사용하여 코드를 실행하기 전에 잠재적인 오류를 잡을 수 있습니다.

그리고 여기 있습니다, 출발해 보세요, 제亲愛한 학생들! 우리는 파이썬 함수 어노테이션의 땅을 거쳤습니다. 이 가이드가 이 개념을 여러분에게 밝히었기를 바랍니다. 기억해 두세요, 배우는 가장 좋은 방법은 실제로 시도하는 것이라는 것을. 그래도 여러분의 코드에 이 어노테이션을 실험해 보세요. 코딩을 즐겁게, 여러분의 함수는 항상 잘 어노테이션 되길 바랍니다!

Credits: Image by storyset