83443
# 環境

Python3.9

# やりたいこと

文字列の集合体を受け取る関数を作りたいです。  
関数内では、`len`と`for`文を使います。

`len`と`for`文しかないので、list以外の要素も受け取れるようにしたいです。  
たとえば、以下の型はすべてサポートしたいです。

  * list
  * set
  * numpy.ndarray

# 質問

この場合、引数にはどのような型ヒントを付けるべきでしょうか？  
以下のように`Union`を使えば、複数の型を指定できますが、可読性があまりよろしくありません。

```

    def foo(user_ids: Union[Set[str],List[str], numpy.ndarray]):
        print(f"length{len(user_ids)})
        for user_id in user_ids:
            print(user_id)
    
    
```
CC BY-SA 4.0
2021-11-05T14:34:58.977
83442
2021-11-05T15:43:36.570
19524
question
python
`len`とfor文からしか使われな引数には、どんな型ヒントを付けるべきか？
<https://docs.python.org/ja/3/library/collections.abc.html>

`__iter__`と`__len__`をサポートする[collections.abc.Collection](https://docs.python.org/ja/3/library/collections.abc.html#collections.abc.Collection)
でいいと思います。

```

    from collections.abc import Collection
    
    def foo(user_ids: Collection[str]):
        ...
    
```
CC BY-SA 4.0
2021-11-05T15:43:36.570
83443
2021-11-05T15:43:36.570
12274
83442
answer