连接元组的元组时的 PEP8 检查
PEP8 inspection when concatenating tuples of tuples
我正在连接元组的元组,例如:
a = 1, 2
b = 1, 2
ab = a, b
c = 1, 2
d = 1, 2, 3
cd = c, d
z = ab + cd
这显然按预期工作,但是 PEP8 代码检查器(集成在 PyCharm 中)用 弱警告:
标记最后一行
Expected type 'Tuple[Tuple[int, int], ...]' (matched generic type 'Tuple[_T_co, ...]'), got 'Tuple[Tuple[int, int], Tuple[int, int, int]]' instead
我理解这是假设我只想连接对,而 d 元组打破了这种假设。如果我删除 d 中的最后一个元素或向其他元组添加额外的元素,PEP8 检查器不会抱怨。
我可以禁用该线路的特定检查,但是有没有其他方法可以防止 PEP8 检查员对我的意图做出假设?
只需将注释 # noinspection PyTypeChecker
放在您希望 Pycharm linter 忽略的代码行之前,如下所示:
# noinspection PyTypeChecker
z = ab + cd
显式注解应该可以解决这个问题。
如果你总是有一个二元组和一个三元组的元组,你需要:
z: Tuple[Tuple[int, int], Tuple[int, int, int]]
如果你有一个可变长度元组的可变长度元组,你需要:
z: Tuple[Tuple[int, ...], ...]
省略号 ...
是 Python 语法中非常有趣的部分。它与内置的 Ellipsis
常量相同,除了用于类型注释外,还可用于自定义切片功能。有些人还用它作为 pass
的替代品,如
def stub_function():
...
正如我在原来的问题中提到的,我不想禁用检查。
而且,在阅读了 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
作为一般规则,与其服用止痛药(禁用检查),我更愿意了解我的 "disease" 原因并清楚地表明我的意图。
我正在连接元组的元组,例如:
a = 1, 2
b = 1, 2
ab = a, b
c = 1, 2
d = 1, 2, 3
cd = c, d
z = ab + cd
这显然按预期工作,但是 PEP8 代码检查器(集成在 PyCharm 中)用 弱警告:
标记最后一行Expected type 'Tuple[Tuple[int, int], ...]' (matched generic type 'Tuple[_T_co, ...]'), got 'Tuple[Tuple[int, int], Tuple[int, int, int]]' instead
我理解这是假设我只想连接对,而 d 元组打破了这种假设。如果我删除 d 中的最后一个元素或向其他元组添加额外的元素,PEP8 检查器不会抱怨。
我可以禁用该线路的特定检查,但是有没有其他方法可以防止 PEP8 检查员对我的意图做出假设?
只需将注释 # noinspection PyTypeChecker
放在您希望 Pycharm linter 忽略的代码行之前,如下所示:
# noinspection PyTypeChecker
z = ab + cd
显式注解应该可以解决这个问题。
如果你总是有一个二元组和一个三元组的元组,你需要:
z: Tuple[Tuple[int, int], Tuple[int, int, int]]
如果你有一个可变长度元组的可变长度元组,你需要:
z: Tuple[Tuple[int, ...], ...]
省略号 ...
是 Python 语法中非常有趣的部分。它与内置的 Ellipsis
常量相同,除了用于类型注释外,还可用于自定义切片功能。有些人还用它作为 pass
的替代品,如
def stub_function():
...
正如我在原来的问题中提到的,我不想禁用检查。 而且,在阅读了 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
作为一般规则,与其服用止痛药(禁用检查),我更愿意了解我的 "disease" 原因并清楚地表明我的意图。