PEP-484 によると、次のようにジェネレーター関数のヒントを入力できます。
from typing import Generator
def generate() -> Generator[int, None, None]:
for i in range(10):
yield i
for i in generate():
print(i)
ただし、リストの内包表記では、PyCharmで次のエラーが発生します。
Expected 'collections.Iterable', got 'Generator[int, None, None]' instead less... (⌘F1)
PyCharmがこれをエラーとみなしている理由は何ですか?ありがとうございました。
いくつかの答えを読んだ後のいくつかの説明。 PyCharm Community Edition 2016.3.2(最新バージョン)を使用しており、typing.Generator
(コードで更新)。上記のコードは正常に実行されますが、PyCharmはこれをエラーとみなします:
だから、これが実際にエラーなのか、PyCharmのサポートされていない機能なのか疑問に思っています。
Oleksandr Dashkov がコメントしたように、Pycharm 2017.1 EAPで同じコードを試しました。これはこのアノテーションを正しく処理します。この機能はPyCharmの次の公式バージョンに統合されると思います。皆に感謝します。
typing
モジュールをインポートする必要があります。ドキュメントごと:
ジェネレーター関数の戻り値の型には、ジェネリック型
Generator[yield_type, send_type, return_type]
によって提供された -typing.py
モジュール
代わりにこの方法を試してください:
from typing import Generator
def generate() -> Generator[int, None, None]:
for i in range(10):
yield i
上記は望ましい結果になります:
l = [i for i in generate()]
出力:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
コメントで指摘されているように、PyCharmの最新バージョンを使用しない場合があります。バージョン2016.3.2に切り替えてみて、あなたmightで問題ありません。残念ながら、これは@AshwiniChaudharyのコメントによると、よく知られたバグです。
さらに、報告された問題(最後のバージョンのPyCharm)は、昨年12月に提出されました。彼らはおそらくそれを修正し、修正を同じバージョンにプッシュしました。