当我进行类型转换并重新分配变量时,Mypy 会抱怨

问题描述 投票:0回答:1

考虑最小可重现示例:

a = ("a", "b", "c")
a = list(a)

我正在做的是将一个元组转换为一个列表并将其重新分配给它。这被认为是好的做法吗?

对我来说确实如此。想象一下,某个包的函数返回一个元组,但您的代码中需要一个列表并且您不想携带太多变量。我看不出有任何理由不允许人们这样做。我的推理有什么错误吗?

我问是因为 mypy 抱怨:

error: Incompatible types in assignment (expression has type "list[str]", variable has type "tuple[str, str, str]")  [assignment]

显而易见的解决方案是执行以下操作:

a_tpl = ("a", "b", "c")
a_lst = list(a_tpl)

但感觉就像将类型粘贴到变量名称上,我不确定这是否比我上面描述的重新分配更好。

python python-typing mypy
1个回答
0
投票

对我来说,这听起来更像是风格问题,而不是对错问题。

主要思想是,改变这样的类型会使代码更难以阅读和/或重构。例如,考虑您称之为

a.append("d")
的某处。这在列表上可以完美工作,但在元组上会出现 AttributeError,因此在函数中移动此调用时需要非常小心。

在将

a
转换为
list
之前和之后使用单独变量的解决方案是可行的,或者,如果您从未实际使用原始元组,则可以在单个语句中初始化
a

a = list(call_that_produces_the_tuple())
© www.soinside.com 2019 - 2024. All rights reserved.