当前位置: 首页 > 面试题库 >

如何在python 3.6中使用类型提示?

谷梁俊楚
2023-03-14
问题内容

我注意到python 3.5和python 3.6添加了许多有关静态类型检查的功能,因此我尝试使用以下代码(在python 3.6中为稳定版本)。

from typing import List

a: List[str] = []
a.append('a')
a.append(1)
print(a)

令我惊讶的是,尽管python1附加到list仅包含字符串的,但它却没有给我错误或警告。Pycharm检测到类型错误并向我发出警告,但是它不明显,并且未在输出控制台中显示,我担心有时可能会错过它。我想要以下效果:

  1. 如果很明显如上所述我使用了错误的类型,请抛出警告或错误。
  2. 如果编译器无法可靠地检查我使用的类型是对还是错,请忽略它。

那可能吗?也许mypy可以做到,但我宁愿使用python-3.6样式类型检查(如a: List[str]),而不是中使用的注释样式(如# type List[str]mypy。我很好奇,是否在本机python 3.6中有一个开关可以实现我在上面提到的两点。


问题答案:

那可能吗?也许mypy可以做到,但是我更喜欢使用Python-3.6样式类型检查(如a: List[str]),而不是# type List[str]mypy中使用的注释样式(如)。我很好奇,是否在本机python 3.6中有一个开关可以实现我在上面提到的两点。

Python不可能为您做到这一点;您 可以 使用它mypy来进行类型检查(PyCharms内置检查器也应该这样做)。除此之外,mypy
不仅限于 键入注释# type List[str],还可以像在Python 3.6中那样使用变量注释,因此a: List[str]效果同样好。

随着mypy作为是,因为释放是新鲜的,你需要安装typed_ast和执行mypy--fast-parser--python- version 3.6
为记录在mypy的文档。这可能很快就会改变,但是现在您需要他们来使其平稳运行

更新: --fast-parser并且--python-version 3.6现在不需要。

之后,mypy就可以很好地检测到第二个操作的不兼容性a: List[str]。假设您的文件tp_check.py使用以下语句调用:

from typing import List

a: List[str] = []
a.append('a')
a.append(1)
print(a)

mypy使用上述参数运行(必须首先运行pip install -U typed_ast):

python -m mypy --fast-parser --python-version 3.6 tp_check.py

捕获错误:

tp_check.py:5: error: Argument 1 to "append" of "list" has incompatible type "int"; expected "str"

如前所述 在类型与Python暗示许多其他的答案mypyPyCharmS’型,跳棋是进行验证,那些 不Python本身
。Python当前不使用此信息,它仅将其存储为元数据,并且在执行期间将其忽略。



 类似资料:
  • 问题内容: 我想在当前的Python 3.5项目中使用类型提示。我的函数应该接收一个函数作为参数。 如何在类型提示中指定类型函数? 我检查了PEP 483,但在那里找不到函数类型提示。 问题答案: 正如@jonrsharpe在评论中指出的,可以使用以下方法完成: 问题是,将其本身翻译为: 一个Callable接受 任意数量的/类型的 参数,并返回任何类型的值。在大多数情况下,这不是您想要的,因为您

  • 问题内容: 我正在使用Ubuntu 16.04,该版本随附Python 2.7和Python 3.5。我已经在上面安装了Python 3.6,并通过将符号3链接到python3.6 。 然后,我使用安装了。当我检查时,virtualenv已安装在适当的位置,因此当我尝试使用它创建virtualenv时,会抛出错误: 我该怎么办? 问题答案: 我们通常用来创建一个新的virtualenv(这是我们的

  • 问题内容: 假设我有一个函数: 如何为可以指定的东西指定返回类型? 问题答案: 您正在寻找。 由于您的返回类型可以是(从返回),也应该使用: 在有关打字的文档中,是以下内容的简写: 等价于。 其中表示类型或的值。 如果由于担心别人可能偶然发现而没有意识到它的含义而希望变得露骨,则可以始终使用: 但是我怀疑这是一个好主意,是一个指示性名称,它确实节省了几次击键。 正如@ Michael0x2a的注释

  • 如何提醒python pickle的返回类型。类中的load()命令,其中load()命令返回该类的对象。 我本来希望这是直截了当的 可以,但python抱怨myClass没有定义。 我想让python知道代码完成的类类型,等等。

  • 我有一个python函数,可以返回或。有没有一种方法可以使用类型提示指定返回类型? 比如,这是正确的做法吗?

  • 问题内容: 我试图了解如何使用类型提示。从PEP-484,我知道我可以使用的无论是作为或。 但是下面的例子呢? 如果似乎与表示相同的意思,我为什么要全部使用? 问题答案: 是的简写表示法,它告诉类型检查器特定类型的对象是必需的 还是 必需的。代表 任何有效的类型提示 ,包括复杂的复合类型或更多类型。只要您有带有默认值的关键字参数,就应该使用。 因此,对于您的两个示例,您有和容器类型,但是关键字参数