2016-09-18 2 views
4

내가이 매우 간단한 코드가 힌트은`에서 Iterable [(INT는 INT)]를 '유형에서 허용되지 않습니다 튜플

Traceback (most recent call last): 
    File "type_m.py", line 6, in <module> 
    def locate_zeros(matrix: IntegerMatrix) -> Iterable[Position]: 
    File "/usr/lib/python3.5/typing.py", line 970, in __getitem__ 
    (len(self.__parameters__), len(params))) 
TypeError: Cannot change parameter count from 1 to 2 

을 왜 할 수 없습니다 반환 유형으로 Int 쌍을 반복 할 수 있습니까?

-> PositionIterable[Any] 모두 작동하므로, 단지 IterablePosition이 함께 작동하지 않습니다.

답변

6

튜플 유형을 Position ((int, int)이 아니라)으로 선언하려면 typing.Tuple[int, int]을 사용해야합니다.

+0

하지만 왜'foo() -> (int, int)'는'foo() -> Iterable [(int, int)]'가 아닌'작동합니까? – Caridorc

+4

함수 주석은 아무 것도하지 않습니다. 그들은 순전히 정보 제공의 것입니다. 파이썬 객체를 타입 힌트로 사용할 수 있으며'(int, int)'는 유효한 파이썬 객체입니다. '-> 42' 또는'-> super'를 사용할 수도 있습니다. 그다지 유용하지는 않지만 문법적으로는 정확합니다. 반면에 'typing.Iterable'은 함수 주석에서 타입 힌트를 더 구체적으로 의미하며'typing' 모듈의 다른 유형 주석 클래스와 함께 작동하도록 설계되었습니다. –

+0

매우 명확합니다. 감사하고 좋은 하루 되세요. – Caridorc