Python-typing: 유형 치수 및 지원 모든 유형 상세 정보
Any는 특별한 유형입니다.
정적 유형 검사자는 모든 유형을 Any와 호환되는 것으로 간주하고 반대로 Any도 모든 유형과 호환됩니다.
즉, 유형이 Any인 값에 대해 모든 작업 또는 메서드를 호출하여 변수에 값을 지정할 수 있습니다.
from typing import Any
a = None # type: Any
a = [] # OK
a = 2 # OK
s = '' # type: str
s = a # OK
def foo(item: Any) -> int:
# Typechecks; 'item' could be any type,
# and that type might have a 'bar' method
item.bar()
...
주의해야 할 것은 모든 유형의 값을 다른 구체적인 유형에 부여할 때 Python은 유형 검사를 실행하지 않는다는 것이다.예를 들어 a를 s에 부여할 때 s가str 형식으로 선언되더라도 실행할 때 int 값을 수신하면 정적 형식 검사기가 틀리지 않습니다.또한 반환값이 유형이 없거나 인삼이 유형이 없는 모든 함수는 기본적으로 Any 유형을 사용합니다.
def legacy_parser(text):
...
return data
# A static type checker will treat the above
# as having the same signature as:
def legacy_parser(text: Any) -> Any:
...
return data
동적 유형과 정적 유형의 코드를 혼용해야 할 때, 상술한 행위는 Any를 응급 출구로 사용할 수 있다.Any와 object의 행동 대비.
Any와 비슷하게 모든 유형은 object의 하위 유형입니다.그러나 Any와 달리 성립되지 않습니다:object는 다른 모든 종류의 하위 형식이 아닙니다.
이것은 값의 형식이object일 때 형식 관리자가 거의 모든 동작을 거부한다는 것을 의미합니다.지정한 형식의 변수에 값을 부여하는 것은 형식 오류입니다.
예:
def hash_a(item: object) -> int:
# Fails; an object does not have a 'magic' method.
item.magic()
...
def hash_b(item: Any) -> int:
# Typechecks
item.magic()
...
# Typechecks, since ints and strs are subclasses of object
hash_a(42)
hash_a("foo")
# Typechecks, since Any is compatible with all types
hash_b(42)
hash_b("foo")
object를 사용하면 모든 형식을 안전하게 호환할 수 있는 값을 표시합니다.Any를 사용하여 동적으로 정의된 값 유형을 나타냅니다.추가:python3.5 typing - 형식 표시 지원
함수는 다음과 같이 문자열을 받아들이고 되돌려줍니다.
def greeting(name: str) -> str:
return 'Hello' + name
함수greeting에서 매개 변수name는str 형식을 예상하고str 형식을 되돌려줍니다.하위 유형은 매개변수로 허용됩니다.1.1. 유형 별칭
형 앨리어스는 유형을 앨리어스에 할당하여 정의됩니다.이 예에서 Vector와 List[float]는 서로 바꿀 수 있는 동의어로 간주됩니다.
from typing import List
Vector = List[float]
def scale(scalar: float, vector: Vector) -> Vector:
return [scalar * num for num in vector]
# typechecks; a list of floats qualifies as a Vector.
new_vector = scale(2.0, [1.0, -4.2, 5.4])
유형 별칭은 복잡한 유형 서명을 간소화하는 데 사용됩니다.
예:
from typing import Dict, Tuple, List
ConnectionOptions = Dict[str, str]
Address = Tuple[str, int]
Server = Tuple[Address, ConnectionOptions]
def broadcast_message(message: str, servers: List[Server]) -> None:
...
# The static type checker will treat the previous type signature as
# being exactly equivalent to this one.
def broadcast_message(
message: str,
servers: List[Tuple[Tuple[str, int], Dict[str, str]]]) -> None:
...
None은 유형 힌트로 특수한 상황이며 type(None)으로 대체됩니다.이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.