2017-06-17 33 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? –