连接元组的元组时进行PEP8检查

时间:2018-12-18 15:16:53

标签: python tuples python-3.5

我正在连接元组的元组,例如:

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检查员对我的意图进行假设吗?

3 个答案:

答案 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

作为一般规则,我宁愿知道引起“疾病”的原因并明确声明自己的意图,而不是服用止痛药(禁用检查)。