首页 > 编程问答 >Python 类型注释中“|”两边是否“强制”使用空格?

Python 类型注释中“|”两边是否“强制”使用空格?

时间:2024-08-07 04:05:37浏览次数:13  
标签:python annotations coding-style

“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 不会强制要求 | 周围的空格。

  • 其他风格指南: 一些组织可能会在其内部风格指南中对类型提示空格有具体的规则。

务实的方法

鉴于没有严格的规则,最佳方法是:

  1. 与你的团队或项目保持一致: 最重要的因素是一致性。选择一种风格并坚持下去。

  2. 优先考虑可读性: 如果空格真的提高了特定类型提示的可读性,请使用它们。

  3. 不要过于教条: 不要在微不足道的风格问题上过于纠结。专注于编写清晰、正确的代码。

没有对或错的答案

最终,是否在 Python 类型提示的 | 周围使用空格是一个风格偏好的问题。没有明确的对错之分。选择你觉得最可读、最符合你项目中其他代码的风格。

标签:python,annotations,coding-style
From: 78840801

相关文章

  • ArcPro (3.2+) Python 脚本工具中从 .atbx Toolbox 相对导入本地模块
    我设置了一个库和关联的ArcGISToolbox,以便:/root├──Toolbox.atbx├──mylib│└──my_function.py├──my_tools│└──my_gp_script.py我将代码存储库的开发克隆保存在公司共享服务器上的一个位置,并在GitHub上托管一份副本。当我进行更新时,我会......
  • Python vs. R:揭秘机器学习领域的双璧
    一、引言1.1背景介绍随着大数据和人工智能技术的飞速发展,机器学习已经成为了一个热门领域。在机器学习领域,Python和R是两种广泛使用的编程语言。Python因其简洁易读的语法和强大的库支持,成为了最受欢迎的编程语言之一。而R则以其强大的统计分析和数据可视化能力,在统计学......
  • Windows10 安装编译后的 pysqlcipher3-1.2.1 基于 Python 3.8.10
    Windows10安装编译后的pysqlcipher3-1.2.1基于Python3.8.10本文主要是将直接安装编译后的文件,不一定的成功,但是可以尝试使用,若无法直接安装,请参考编译过程,自行编译安装,编译过程见这里安装pysqlcipher3这里用32位举例因为64位安装完全相同,只需要把对应的位数换成64......
  • 【Python】Python基础语法知识点汇集
    Python是一种高级的、解释型的编程语言,以其清晰的语法和代码可读性而闻名。本篇文章将汇集Python编程的基础语法知识点,为初学者提供一个全面的学习指南。......
  • 启动Python 的内置服务器访问本地图片
    要使用Python的内置服务器访问本地图片并正确地显示在浏览器中,你需要将图片文件放在内置服务器的根目录或其子目录中。以下是详细步骤:1.将图片文件复制到服务器根目录:例如,将zheng.jpeg文件复制到一个特定的目录中(例如,你的项目目录)。假设你将图片文件复制到C:\Users\panda......
  • 17:Python数据类型练习题
    #1获取c1,c2相同的元素列表c1=[11,22,33]c2=[22,33,44]foriinc1:ifiinc2:print(i)#2获取c1中有,c2没有的元素列表foriinc1:ifinotinc2:print(i)#3获取c2中有,c1没有的元素列表foriinc2:ifinotinc1:print(i)#4获......
  • (Jmeter新玩法)Python 调 Jmeter执行参数化jmx脚本
    #Python调Jmeter执行参数化jmx脚本importosfromos.pathimportjoinimporttimeimportrefromstringimportTemplatejmeter_Home=r"F:\softtotal\xxx\bin\jmeter.bat"#jmx文件路径currpath=os.path.dirname(os.path.realpath(__file__))#要运行的jmx脚......
  • python爬虫预备知识三-多进程
    python实现多进程的方法:fork、multiprocessing模块创建多进程。os.fork方法os.fork方法只适合于unix/linux系统,不支持windows系统。fork方法调用一次会返回两次,原因在于操作系统将当前进程(父进程)复制出一份进程(子进程),这两个进程几乎完全相同,fork方法分别在父进程和子进程中......
  • PEP 8 – Python 代码风格指南中文版(七)
    编程建议(2) 定义异常时,应该从Exception类继承,而不是从BaseException类继承。直接从BaseException继承的异常通常是那些几乎不应该被捕获的异常。设计异常层次结构时,应该基于捕获异常的代码可能需要进行的区分,而不是基于异常被抛出的位置。目标是通过编程方式回答“出了......
  • Python-记录一次迭代求和
    importitertoolsdefget_result(hope,list_input):""":paramhope:#期望相加所得参数:paramlist_input:#所有数值:return:"""defgenerate_combination(items,length):forcombinationinitertools.co......