簡體   English   中英

在python 3.6中輸入提示生成器

[英]Type hinting generator in python 3.6

根據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中的錯誤還是不支持的功能。

您需要導入typing模塊。 根據文檔:

生成器函數的返回類型可以通過typing.py模塊提供的泛型類型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版本,你可能沒問題 不幸的是,根據@AshwiniChaudhary的評論,這是一個眾所周知的錯誤。

更多,報道的問題(最新版本的PyCharm)於去年12月提交。 他們可能修復了它並將修改推送到同一版本。

正如Oleksandr Dashkov評論的那樣 ,我使用Pycharm 2017.1 EAP嘗試了相同的代碼,它正確地處理了這個注釋。 我想這個功能將被集成到PyCharm的下一個正式版本中。 謝謝大家。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM