指定函数返回类型为dict的KeysView

Posted

技术标签:

【中文标题】指定函数返回类型为dict的KeysView【英文标题】:Specifying function return type to be dict's KeysView 【发布时间】:2017-11-12 21:40:42 【问题描述】:

在 PyCharm 中,我得到了以下 Python 3 代码:

def get_dict_keys(d: dict) -> list:
    assert(isinstance(d, dict))
    return d.keys()

检查代码时出现以下错误:

Expected type 'list', got 'KeysView' instead

我想指定正确的返回码以消除此警告。

【问题讨论】:

从问题在哪个方向您想更正它并不清楚。 应该该方法返回一个列表,在这种情况下是代码错误而不是打字错误?如果代码正确,那么它是否专门返回KeysView(而不是一般的Iterable)真的很重要吗?坦率地说,在duck typing 的上下文中,这似乎是一种奇怪的写法。 @jonrsharpe,我想保持代码不变,但修复警告。我同意你的观点,指定 typing.Iterabletyping.KeysView 更好 Correct way to write type hints for keys and items的可能重复 为什么你认为typing.Iterabletyping.KeysView好? KeysView 更好,因为它有 __contains__ fo in 操作(如果我错了,请纠正我),所以它更接近 dict 键的许多用法。当然,在鸭子类型的上下文中,您根本不需要任何类型提示。 【参考方案1】:

Python 的类型库支持指定Iterable 类型:

from typing import Iterable

def get_dict_keys(d: dict) -> Iterable:
    assert(isinstance(d, dict))
    return d.keys()

【讨论】:

以上是关于指定函数返回类型为dict的KeysView的主要内容,如果未能解决你的问题,请参考以下文章

函数的不确定返回类型

视图函数未返回有效响应。返回类型必须是字符串,dict

指定 Julia 函数只能采用其内容为特定类型的字典/数组的正确方法是啥?

如何将 py_func 与返回 dict 的函数一起使用

Python字典dict的常用方法和函数

当一个函数无返回值时,函数的类型应定义为啥