【发布时间】:2021-03-01 22:38:02
【问题描述】:
我在 Python 中使用 Unions(当然还有 Optionals)时遇到了一些奇怪的问题——也就是说,静态类型检查器似乎针对联合体的所有成员而不是联合体的成员测试属性(即它似乎过于严格?)。例如,考虑以下情况:
import pandas as pd
def test_dummy() -> pd.DataFrame:
df = pd.DataFrame()
df = df.fillna(df)
return df
这会创建一个类型警告,如pd.fillna(..., inplace: Bool = False, ...) -> Optional[pd.DataFrame](如果inplace=True 则返回None)。我怀疑理论上静态类型检查器应该实现函数的返回取决于参数(编写代码时应该知道),但这有点超出了重点。
我有以下问题:
-
解决此问题的最佳方法是什么?我可以想到两种解决方案:
i) 什么都不做——这会在我的代码中产生丑陋的曲线
ii)
cast将fillna返回到pd.DataFrame;我的理解是这是静态类型检查器的一个信息性步骤,因此不应引起任何担忧或问题? -
让我们考虑一下我正在编写一个函数
f,与此类似,它的返回类型会根据函数调用输入而有所不同,这应该在运行前就可以确定。为避免日后出现此类错误;编写此函数的最佳方法是什么?像@typing.overload这样的事情会更好吗?
【问题讨论】:
标签: python pandas type-hinting python-typing