我正在连接元组的元组,例如:
a = 1, 2
b = 1, 2
ab = a, b
c = 1, 2
d = 1, 2, 3
cd = c, d
z = ab + cd
这显然可以按预期工作,但是PEP8代码检查器(集成在PyCharm中)用弱警告标记了最后一行:
预期类型'Tuple [Tuple [int,int],...]'(匹配的通用类型'Tuple [_T_co,...]'),得到了'Tuple [Tuple [int,int],Tuple [int ,int,int]]'代替
我了解这是假设我仅希望连接对,而 d 元组打破了这种假设。如果删除 d 中的最后一个元素或将其他元素添加到其他元组,则PEP8检查器不会抱怨。
我可以禁用该生产线的特定检查,但是还有其他方法可以阻止PEP8检查员对我的意图进行假设吗?
答案 0 :(得分:1)
显式注释应该可以解决此问题。
如果您始终具有两个元组和三个元组的元组,则需要:
z: Tuple[Tuple[int, int], Tuple[int, int, int]]
如果您有一个可变长度元组的可变长度元组,则需要:
z: Tuple[Tuple[int, ...], ...]
省略号...
是Python语法中非常有趣的一部分。它与内置的Ellipsis
常量相同,除了用于类型注释之外,还可以用于自定义切片功能。像
pass
def stub_function():
...
答案 1 :(得分:0)
只需将注释# noinspection PyTypeChecker
放在您希望Pycharm linter忽略的代码行的前面,就像这样:
# noinspection PyTypeChecker
z = ab + cd
答案 2 :(得分:0)
正如我在原始问题中提到的那样,我不想禁用检查。 而且,在阅读了Scott Colby的建议之后,我开始使用类型注释,所以我的首选解决方案是:
from typing import Tuple
MyTuple = Tuple[Tuple[int, ...], ...]
a = 1, 2
b = 1, 2
ab = a, b # type: MyTuple
c = 1, 2
d = 1, 2, 3
cd = c, d # type: MyTuple
z = ab + cd
作为一般规则,我宁愿知道引起“疾病”的原因并明确声明自己的意图,而不是服用止痛药(禁用检查)。