你应该什么时候用mypy声明类型



我刚开始使用mypy,正试图弄清楚何时应该声明类型。

例如,我在运行以下代码片段后运行:

pip install mypy pandas data-science-types

注意:我使用了data-science-types库来获取pandas的类型提示;它没有得到积极维护,但在像我在这里做的这样的简单测试中似乎工作得很好。

import pandas as pd
df: pd.DataFrame = pd.DataFrame({"a": [1, 2, 3]})
# mypy is fine with this
df["b"] = "testing"
# mypy is not fine with this
df["b"]: pd.Series = "testing"
# mypy is fine with this
x: pd.Series = df["b"]

这会产生以下输出:

myscript.py:8: error: Unexpected type declaration

第8行是指df["b"]: pd.Series = "testing"行。我好像做错了什么,但我不能百分之百确定是什么。

创建新变量时是否只声明类型?如果是这样的话,有人知道这背后的理由是什么吗?

EDIT:虽然我知道类型注释是可选的,但它们对我需要在一些项目中实现的类型检查很有帮助。这就是我试图弄清楚的原因。

您声明元素的类型将是pd.Series,但由于该类型是字符串,您将得到一个错误

如果你喜欢你可以这样做:

import pandas as pd
df: pd.DataFrame = pd.DataFrame({"a": [1, 2, 3]})
df["b"] = "testing"
#declaring it as a string
df["b"]: str = "testing"
x: pd.Series = df["b"]

但是类型注释是完全不附带的,正如评论中所说

添加类型注释完全是可选的。它应该可以帮助您记录代码并尽早发现错误。

所以在现实中,你可以简化代码,使其看起来像这样:

import pandas as pd
df = pd.DataFrame({"a": [1, 2, 3]})
df["b"] = "testing"
df["b"] = "testing" #this line is unnecessary
x = df["b"]

最新更新