머리말
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__ == '__main__': 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
Mypy에서 지원하는 일반적인 유형은 다음 표에 나와 있습니다(공식 문서 참조).
그 중 목록/ Dict/Iterable/Sequence/Any는 표준 라이브러리 타이핑에서 나옵니다. 여기서 Sequence와 Iterable은 각각 collections.abc.Sequence
및 collections.abc.Iterable
에 해당합니다. 간단히 구별하기 위해 Sequence는 숫자 첨자로 인덱싱할 수 있고 Iterable은 생성기를 나타낼 수 있습니다.
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='', body=None # type: List[str] ): # type: (...) -> bool """Send an email message. Return True if successful.""" pass
Python의 유형 검사에 대한 자세한 소개 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!