2017-06-17 68 views
2

我有一個函數,要求參數同時是Sizing和Iterable。如何提示python3.6該參數的大小和迭代都是?

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

我認爲我可以使用標準typing模塊從python3.5 +和這樣寫:

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和Sizing?

+0

'集合'確實是大小和可迭代的(另見['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中使用這個註解,至少不能編寫你自己的typing類型,PyCharm可能會也可能不會識別。

+2

可能是這個。見:https://youtrack.jetbrains.com/issue/PY-24605 –

+0

@JimFasarakisHilliard,的確如此。我必須先檢查你的軌跡。 –

+0

你能否建議如何在我自己的類型中加入Sized和Iterable? –