"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 마이파이 소개

마이파이 소개

2024-08-26에 게시됨
검색:564

MyPy Introduction

소개

MyPy1는 Python용 정적 유형 검사기입니다. C나 Java와 같은 정적으로 유형이 지정되는 언어와 달리 Python은 동적으로 유형이 지정됩니다. 즉, Python에서는 변수 유형을 명시적으로 선언할 필요가 없습니다. 런타임 시 추론됩니다. 예를 들어:

Python(동적 유형 지정)

num = 4                # `num` is inferred as an integer
newString = "new string"  # `newString` is inferred as a string

반대로, 정적으로 유형이 지정된 언어에서는 컴파일 타임에 각 변수의 유형을 지정해야 합니다. 이는 런타임이 아닌 개발 중에 유형 관련 오류를 잡는 데 도움이 됩니다.

C(정적 유형)

int num = 4;            // `num` is declared as an integer
std::string newString = "new string";  // `newString` is declared as a string

왜 MyPy를 사용하나요?

Python과 같이 동적으로 유형이 지정되는 언어에서는 런타임에 유형 오류가 발생할 수 있으며 이로 인해 추적하기 어려운 버그가 발생할 수 있습니다. MyPy는 Python 코드에 유형 힌트를 추가하여 실행 전에 정적으로 확인할 수 있도록 하여 이 문제를 해결합니다. 이는 여러 가지 장점을 제공합니다:

  • 조기 오류 감지: 런타임에 발생하는 대신 개발 중에 유형 관련 오류를 식별합니다.
  • 향상된 코드 가독성: 유형 힌트는 예상되는 변수 및 함수 인수 유형을 명확하게 하여 코드 가독성을 향상시킵니다.
  • 더 나은 IDE 지원: 유형 힌트를 지원하는 IDE에서 향상된 코드 완성 및 인라인 문서를 제공합니다.

MyPy의 예

다음은 MyPy에서 유형 힌트를 사용하는 방법을 보여주는 간단한 예입니다.

유형 힌트 없음

def add(a, b):
    return a   b

print(add(5, 3))      # Output: 8
print(add("hello", "world"))  # Output: helloworld

위 코드에서 add 함수는 정수와 문자열을 모두 허용할 수 있는데 이는 의도한 동작이 아닐 수 있습니다.

유형 힌트 포함

def add(a: int, b: int) -> int:
    return a   b

print(add(5, 3))      # Output: 8
# mypy will report an error for the following line:
# print(add("hello", "world"))  # TypeError: Expected int, got str

유형 힌트(a: int, b: int)를 포함하면 add가 정수에서만 작동하도록 지정합니다. MyPy는 이러한 유형 힌트에 대해 코드를 확인하여 잠재적인 유형 관련 문제를 조기에 포착합니다.

MyPy 설치 및 실행

MyPy를 시작하려면:

  1. 설치: pip를 사용하여 MyPy를 설치합니다.
   python3 -m pip install mypy
  1. MyPy 실행: 일단 설치되면 MyPy를 실행하여 코드에 유형 오류가 있는지 확인할 수 있습니다. 다음 명령을 사용하십시오.
   mypy program.py

이 명령은 컴파일러가 C에서 구문을 확인하는 방법과 유사하게 코드를 정적으로 확인합니다. 실제로 코드를 실행하지 않고도 발견한 모든 유형 오류를 보고합니다.

MyPy를 효과적으로 사용하면 정적 유형 지정의 이점을 Python에 통합하는 동시에 동적 특성의 유연성을 누릴 수 있습니다.

MyPy로 예제를 코딩해보자

MyPy 없이

def greeting(name):
    return 'Hello '   name

# These calls will fail when the program runs, but MyPy will not report an error
greeting(123)
greeting(b"Aniket")

마이파이와 함께

유형 주석(유형 힌트라고도 함)을 추가함으로써 MyPy는 잠재적인 문제를 감지할 수 있습니다.

def greeting(name: str) -> str:
    return 'Hello '   name

greeting(3)         # mypy will report: Argument 1 to "greeting" has incompatible type "int"; expected "str"
greeting(b'Alice')  # mypy will report: Argument 1 to "greeting" has incompatible type "bytes"; expected "str"
greeting("World!")  # No error

여기:

  • name: str 주석은 name 인수가 문자열이어야 함을 지정합니다.
  • -> str 주석은 Greeting 함수가 문자열을 반환하도록 지정합니다.

MyPy를 사용해야 하는 경우

MyPy는 여러 상황에서 유용합니다:

  • 오류 조기 포착: 코드를 실행하기 전에 MyPy를 사용하여 유형 관련 오류를 찾으세요. 이는 실수를 조기에 발견하고 코드 안정성을 높이는 데 도움이 됩니다.

  • 코드를 더 명확하게 만들기: 유형 힌트를 추가하면 코드를 더 쉽게 이해할 수 있습니다. 어떤 유형의 값이 예상되는지 보여주므로 다른 사람(그리고 미래의 자신)이 코드를 더 잘 이해하는 데 도움이 됩니다.

  • 이전 코드 업그레이드: 이전 코드를 업데이트할 때 MyPy는 유형 힌트를 추가하여 유형 문제를 찾는 데 도움을 주어 전환을 더 원활하게 만듭니다.

  • 프로토타입 개선: 새로운 기능이나 프로토타입을 구축할 때 MyPy는 유형 규칙을 적용하여 새 코드가 기존 코드와 올바르게 작동하도록 보장합니다.

  • 대규모 프로젝트 유지: 기여자가 많은 대규모 프로젝트에서 MyPy는 코드 일관성을 유지하고 유형 관련 버그를 방지하는 데 도움이 됩니다.

  • Boost IDE 기능: IDE를 사용하면 MyPy에서 코드 완성 및 탐색과 같은 기능이 향상되어 개발이 더 쉬워집니다.

MyPy를 사용하면 Python의 유연성을 계속 활용하면서 더 훌륭하고 안정적인 Python 코드를 작성할 수 있습니다.

mypy에 대한 공식 빠른 치트시트


  1. 공식 문서 ↩

릴리스 선언문 이 글은 https://dev.to/aniket_purohit/mypy-introduction-1i3?1 에서 복제하였습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3