2017-03-10 12 views
0

昨日私は2.7から3.6にアップグレードしました。私はまたタイプヒントを使用し始めました。ここ は、私のコードの断片である:Python3でタイプヒントについて混乱しました

import numpy as np 
from typing import Union, Tuple, Sequence, Any 

Vector = Union[np.ndarray, Tuple[float, float, float]] 
Matrix = np.ndarray 
Tetra = Tuple[Vector, Vector, Vector, Vector] 
... 
def transform_ref2tetra(tetra: Tetra) -> Matrix: 
    """ Return the matrix M that transforms the points of the reference tetra 
    R=[[1,0,0],[0,1,0],[0,0,1],[0,0,0]] to tetra, i.e., M.R=tetra. 
    """ 
    ... 

PyCharm2016.3.2に、私は私が手クイックドキュメントをお願いする場合:

def transform_ref2tetra(tetra: Tetra) 
Inferred type: (tetra: Tuple[Any, Any, Any, Any]) -> ndarray 

Return the matrix M that transforms the points of the reference tetra 
R=[[1,0,0],[0,1,0],[0,0,1],[0,0,0]] to tetra, i.e., M.R=tetra. 

これは単なるドキュメントの問題ではありません。私が電話した場合:

transform_ref2tetra(tetra=("a","b","c","d")) 

私は警告を受けません(そしてもちろん、実行時にエラーが発生します)。

何が起こっているのか考えてみませんか?これはPyCharmの問題ですか、何か間違っていますか?

答えて

0

これは、PyCharmsのタイプチェッカーの問題のようです。タイプとしてTetraは、Pythonが正しく定義されています

>>> Tetra 
typing.Tuple[typing.Union[numpy.ndarray, typing.Tuple[float, float, float]], typing.Union[numpy.ndarray, typing.Tuple[float, float, float]], typing.Union[numpy.ndarray, typing.Tuple[float, float, float]], typing.Union[numpy.ndarray, typing.Tuple[float, float, float]]] 

PyCharmは、何らかの理由で、間違っていると、有効なものとして受け入れられている例などtetra=("a","b","c","d")につながるAny秒にこれを変換しているようです。

これはPyCharmsの問題追跡ツールに提出するべきですが、numpyのスタブファイルが見つからないため、Anyが使用されています。

+0

これは有望そうだが、私はそれが当てはまるとは思わない。でも、私はnp.ndarrayをintに変更します。Anyを取得します。 – Eduardo

+3

@Eduardo PyCharmのtypecheckerがどのように動作するかは気づかないのです。別の型チェッカーである 'mypy'が正しくチェックするので、PyCharmで何かが起きているとしか推測できません。 –

関連する問題