>백엔드 개발 >파이썬 튜토리얼 >Python의 유형 검사에 대한 자세한 소개

Python의 유형 검사에 대한 자세한 소개

高洛峰
高洛峰원래의
2017-02-20 10:21:241614검색

머리말

Python이 강력한 유형의 동적 유형 검사 언어라는 것은 누구나 알고 있습니다. 소위 동적 유형은 변수를 정의할 때 변수 유형을 지정할 필요가 없다는 것을 의미합니다. Python 인터프리터는 런타임에 자동으로 이를 확인합니다.

정적으로 유형이 지정된 언어(예: C)와 비교할 때 이는 유형 선언 문자를 몇 개 적게 작성하는 것 이상입니다.

#include <stdlib.h>
#include <stdio.h>

#define BUFF 100

char* greeting(char* name){ 
 char* msg = (char *) malloc(sizeof(char) * BUFF);
 sprintf(msg, "Hello, %s!", name);
 return msg;
}

int main(){ 
 printf("Greeting: <%s>\n", greeting("C99"));
 return 0;
}

def greeting(name): 
 return "Hello, {}!".format(name)
def main(): 
 print("Greeting: <%s>" % greeting("Python35"))
if __name__ == &#39;__main__&#39;: 
 main()

동적 타이핑은 컴퓨터 작업 시뮬레이션에서 어느 정도 우리의 사고를 해방시켜 해결해야 할 문제에 더 집중할 수 있게 해줍니다. 위와 같습니다. 예를 들어, 인사말 함수에서 허용하는 매개변수 유형과 반환 값 유형에 대해 걱정할 필요가 없지만 인사말 함수가 구현해야 하는 기능만 고려하면 됩니다.

물론, 동적 유형이 반드시 정적 유형보다 낫다는 의미는 아닙니다. 위의 예를 C 언어와 Python으로 전환하는 경우:

package main

import "fmt"

func greeting(name string) string { 
 return fmt.Sprintf("Hello, %s", name)
}
func main() { 
 fmt.Printf("Greeting: <%s>", greeting("Go"))
}

정적 타이핑의 장점(그리고 어느 정도 단점)은 메서드를 정의할 때 필수 프로토콜(인터페이스)이 공식화되고, 프로토콜을 준수해야만 사용할 수 있다는 것입니다. 바르게. 이는 여러 사람의 협력, 타사 라이브러리 개발, 신속한 버그 찾기 등에 매우 유용합니다. 정적 타이핑의 또 다른 큰 장점은 IDE가 즉각적인 인터페이스 사용 및 유형 확인을 지원하여 효율성을 더욱 향상시킬 수 있다는 것입니다. 장점이 이렇게 많은데, 파이썬도 배워야 할까요? 실제로 Python 3.5의 PEP 484와 Python 3.6의 PEP 526에는 각각 유형 힌트(Type Hints) 구문이 추가되었습니다. PEP 484는 주로 매개변수의 유형 선언 구문과 함수, 메서드, 클래스 및 반환 값에 관한 것입니다. PEP 526은 변수 유형 선언을 추가합니다:

def greeting(name: str) -> str: 
 return "Hello, {}!".format(name)

Mypy

Mypy는 공식적으로 권장되는 정적 유형입니다. 도구 확인:

python3 -m pip install mypy

mypy 명령을 사용하여 Python 프로그램을 직접 확인할 수 있습니다:

mypy greeting.py

사용하기 쉽고 IDE에 적용할 수 있는 경우 Atom을 예로 들면 플러그인 linter-mypy를 설치할 수 있습니다.

python3 -m pip install typed-ast 
apm install linter 
apm install linter-mypy

Python의 유형 검사에 대한 자세한 소개

Mypy에서 지원하는 일반적인 유형은 다음 표에 나와 있습니다(공식 문서 참조).

Python의 유형 검사에 대한 자세한 소개

그 중 목록/ Dict/Iterable/Sequence/Any는 표준 라이브러리 타이핑에서 나옵니다. 여기서 Sequence와 Iterable은 각각 collections.abc.Sequencecollections.abc.Iterable에 해당합니다. 간단히 구별하기 위해 Sequence는 숫자 첨자로 인덱싱할 수 있고 Iterable은 생성기를 나타낼 수 있습니다.

Python의 유형 검사에 대한 자세한 소개

Python 2.x

유형 주석이 추가된 코드는 Python 3.5 인터프리터를 통해 직접 실행할 수 있지만 Python 2.x와는 완전히 호환되지 않습니다. Python 2.x에서 사용하려면 먼저 타이핑을 설치해야 합니다:

pip install typing

그런 다음 강제로 형식에 추가할 수 있습니다. 한 줄 주석:

def send_email(address, # type: Union[str, List[str]] 
  sender, # type: str
  cc,  # type: Optional[List[str]]
  bcc,  # type: Optional[List[str]]
  subject=&#39;&#39;,
  body=None # type: List[str]
  ):
 # type: (...) -> bool
 """Send an email message. Return True if successful."""
 pass

Python의 유형 검사에 대한 자세한 소개 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.