![](/img/trans.png)
[英]Python 3.6 type hinting for a function accepting generic class type and instance type of the same generic type
[英]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.