gpt4 book ai didi

python - 这个 Python 类型提示语法是什么,括号中包含两种类型?

转载 作者:行者123 更新时间:2023-11-28 19:28:31 25 4
gpt4 key购买 nike

我有一个签名如下的方法:

def get_users_for_survey(survey_id: (int, str),show_deleted_users: bool = False) -> list:
pass

我已经避开了方法体,因为我只对 survey_id 的类型提示部分感兴趣?看起来这意味着它可以是 int 或 str。我想如果那是意图那么它应该是 survey_id: Union(int,str)。 PyCharm 没有反对。你认为我错过了 PEP 484 中的某些内容吗?我不认为它应该是一个元组。

编辑 根据此处提供的答案,这只是一个错误。现在我知道这个错误的根源是什么了。在同样的方法下一行是:

if survey_id and isinstance(survey_id, (int, str)):

所以你在 isinstance 中看到,如果你想适应多种类型,这是一个有效的语法。此方法的作者认为这也是类型提示的有效语法。这是一个引用: Python isinstance with multiple types

最佳答案

是的,你是对的,这不是一个有效的 TypeHint 语法,根据 PEP484 的有效类型提示语法是

from typing import Union

def get_users_for_survey(survey_id: Union[int, str],show_deleted_users: bool = False) -> list:
pass

这意味着 survey_id 可以是 int 或 str 类型。

你问的第二个问题是“为什么 PyCharm 不提示它。?”

回答:

Rather treating it as an invalid TypeHint, the PyCharm treats it as type None which is equivalent to TypeHint Any means it may be of any type.

即使您将此语法用于类型提示(根本无效)

def get_users_for_survey(survey_id: int or str, show_deleted_users: bool = False) -> list:
pass

仍然不会有警告或错误。

关于python - 这个 Python 类型提示语法是什么,括号中包含两种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58857197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com