带有布尔函数的静态类型提示?

问题描述 投票:0回答:1

isinstance(x)
用于分支时,
x
的类型是静态暗示的,以供将来的“错误类型”检查(使用 PyCharm)。

我自己的 True/False 函数是否可以产生相同的效果?

我有这个代码:

def dict_like(x: object) -> bool:
    if isinstance(x, list) and (len(x) > 0) and (isinstance(x[0], tuple)):
        return True
    return False

def handle_dict(y: list):
    ...

def handle_list(w: list):
    ...

def foobar(z: object):
    if dict_like(z):
        handle_dict(z)
    elif isinstance(z, list):
        handle_list(z)
    else:
        ...

“错误类型”检查不喜欢我将

object
传递给
handle_dict()
,后者需要
list
handle_list(z)
没有问题,因为
isinstance(z, list)
暗示了类型。
dict_like()
是否可以像
z
一样静态地暗示
isinstance()
的类型?

如果

dict_like()
可以暗示
x
是像
List[Tuple]
这样的复杂类型,那就特别好。

我现在意识到,在

z: list
调用之前添加
handle_dict()
或使
z
具有
Any
类型可以解决此问题,但我的问题仍然存在。

python pycharm python-typing
1个回答
0
投票

您正在寻找的是

TypeGuard

您需要做的就是让您的函数返回您感兴趣的类型的

TypeGuard

def dict_like(x: object) -> TypeGuard[list[tuple]]
  ...

并像您已经使用它一样使用它。

© www.soinside.com 2019 - 2024. All rights reserved.