“Union 运算符”
|
没有出现在 PEP8 的
其他建议中的“始终被空格包围的运算符”列表中
因此,应该可以将其样式设置为类似于算术运算符,并删除圆括号、方括号内的空格,或者如果该运算符比表达式中的其他运算符具有更高的优先级。
在我看来,删除空格可以提高表达式中的可读性。以下示例:
参数列表:
- def __init__(self, *args: str | None, **kwargs: Any):
+ def __init__(self, *args: str|None, **kwargs: Any):
带默认值的变量:
- level: str | int = 'warn'
+ level: str|int = 'warn'
括号内:
- tuple[str | None, str | None, Sequence[int]]
+ tuple[str|None, str|None, Sequence[int]]
复杂构造:
- def __init__(self, defaults: dict[str | binary, Any] | None = None):
+ def __init__(self, defaults: dict[str|binary, Any] | None = None):
这种风格有突出的例子吗?
如果没有,是否有理由总是使用空格而不是“这就是 PEP 484 中的示例所做的”?
你提到了一个有趣的关于 Python 类型提示中
|
运算符空格的风格问题。虽然 PEP 8 没有明确规定
|
的空格,但让我们探索一下背后的原因和考虑因素。
一致性与可读性
-
PEP 8 的精神: 虽然没有明确提到
|
,但 PEP 8 强调代码一致性和可读性。将空格应用于大多数运算符是为了提高清晰度。将这种逻辑扩展到|
是合理的,即使它在技术上不是“必需的”。 -
视觉上的拥挤: 在你的例子中,省略空格确实可以使某些类型提示看起来更简洁。然而,在更复杂的联合类型中,它可能会导致视觉上的拥挤,使其更难解析。
-
现有实践: 绝大多数 Python 代码(包括类型提示)都遵循在
|
周围添加空格的约定。这种一致性有助于开发人员快速理解代码,而无需过多思考风格差异。
风格指南和工具
-
mypy: 流行的类型检查器 mypy 不会强制要求
|
周围的空格。 -
其他风格指南: 一些组织可能会在其内部风格指南中对类型提示空格有具体的规则。
务实的方法
鉴于没有严格的规则,最佳方法是:
-
与你的团队或项目保持一致: 最重要的因素是一致性。选择一种风格并坚持下去。
-
优先考虑可读性: 如果空格真的提高了特定类型提示的可读性,请使用它们。
-
不要过于教条: 不要在微不足道的风格问题上过于纠结。专注于编写清晰、正确的代码。
没有对或错的答案
最终,是否在 Python 类型提示的
|
周围使用空格是一个风格偏好的问题。没有明确的对错之分。选择你觉得最可读、最符合你项目中其他代码的风格。