2017-06-17 4 views
2

私は、同時にサイズとIterable両方のパラメータを必要とする関数を持っています。どのようにpython3.6のヒントは、そのパラメータのサイズとiterableの両方が必要ですか?

def foo(items): 
    print(len(items)) 
    for i in item: 
     print(i) 

私はpython3.5 +から標準typingモジュールを使用して、これを書くことができることを考えた:

from typing import Collection, Any 

def foo(items: Collection[Any]): 
    print(len(items)) 
    for i in item: 
     print(i) 



foo([1, 2, 3]) 
# PyCharm warns: Expected type 'Collection', got 'List[int]' instead. 

Collection私は必要なもののようになります。class typing.Collection(Sized, Iterable[T_co], Container[T_co])

それは警告原因はなぜ?

IterableとSizedの両方のヒントパラメータにはどうすればよいですか?

+0

'Collection'は実際にはサイズと反復可能です([abc'バージョン](https://docs.python.org/3/library/collections.abc.html#collections.abc.Collection)も参照してください)。これは、PyCharmのバグ、またはそれが使用するプラグインのバグである可能性があります。 – jonrsharpe

答えて

3

Collection was only introduced in 3.6;あなたのPyCharmのバージョンはそれをまだ認識していません。

サイズ3.5の反復可能なコンテナを記述するビルトインはありません。3.5では、少なくともPyCharmが認識しているかどうかわからない独自のtypingタイプを記述することなくこの注釈を使用することはできません。

+2

おそらくこれ。参照してください:https://youtrack.jetbrains.com/issue/PY-24605 –

+0

@ JimFasarakisHilliard、確かにそれです。私はまずあなたを確認しなければならなかった。 –

+0

自分のタイプでSizedとIterableに参加する方法を提案できますか? –

関連する問題