当
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
类型可以解决此问题,但我的问题仍然存在。
TypeGuard
您需要做的就是让您的函数返回您感兴趣的类型的
TypeGuard
:
def dict_like(x: object) -> TypeGuard[list[tuple]]
...
并像您已经使用它一样使用它。