Python 风格指南

Fuchsia 项目遵循 Google Python 风格指南{:.external}, 并且有一些 改进

Google Python 风格指南允许更多的变化(大概涵盖了众多现有来源)。 本指南有更严格的选择。所以Fuchsia Python 文件也将遵循 Google 风格指南,但一个 Google Python 文件可能不符合本指南。见改进 详情如下。

Python 版本 {#python-versions}

构建调用的脚本

构建(GN 或 Ninja)调用的脚本使用 Python 3.8 执行。 构建的系统确保所有 python 脚本都被 Fuchsia 源代码分支内安装的解释器执行。

其他脚本

直接调用的脚本应该在shebang中使用python并且兼容python 版本2和3:#!/usr/bin/env python

开发 Fuchsia 模块的开发人员可能会使用各种平台。 一些平台包括 Python 2 而不是 Python 3,反之亦然。 在我们支持的主要开发环境中包含 Python 3 之前,我们应该支持 Python 2。

虽然支持 Python 2,但在两个版本上测试脚本。

任何政策变更都将反映在本文件中。

多重继承

强烈反对多重继承。 这与 [Google C++ 风格指南:“钻石”继承风险] (https://google.github.io/styleguide/cppguide.html#Inheritance){:.external} 模式中列出的原因相同,原因为 容易混淆。 如果发现避免多重继承不合理的情况,则所有涉及的类必须首先从基类“object”继承,该基类决定使用哪种多重继承方案。

对文本使用 Unicode

在支持 Python 2.x 的脚本中(参见 Python 版本), 显式声明文本字符串为 unicode,二进制数据为字节,分别使用 u""unicode()unichr()b""bytes()byte() 。 Python 3.x 默认对字符串使用 Unicode,因此当对 Python 2 的支持时移除时,本指南将被删除 。

```python {.good} Yes:

a = u”Hello” # Unicode constant. b = unicode(foo) # Convert to Unicode. c = unichr(c) # Convert to Unicode. d = io.open(“bar.txt”).read() # Read text as Unicode.

  1. ```python {.bad}
  2. No:
  3. a = "Hello" # Ambiguous (depends on Python version).
  4. b = str(foo) # Convert to ascii.
  5. c = chr(c) # Convert to ascii.
  6. d = open("bar.txt").read() # Read text as ascii.

改进

我们对 Google Python 风格指南所做的以下改进主要是对变体之间的选择。 例如,如果风格指南说你可以做 A,B 或 C 我们可以选择偏爱 B 并避免其他选择。

缩进

避免与起始的分隔符对齐。偏好为使用固定缩进(4个空格)。

(参考 缩进{:.external} 和 Google Python 风格指南进行比较。)

声明

避免创建单行语句,即使使用 if 语句。

```python {.good} Yes:

  1. if foo:
  2. bar(foo)
  1. ```python {.bad}
  2. No:
  3. if foo: bar(foo)

(参考 声明{:.external} 和 Google Python 风格指南进行比较。)

类型注释

在支持 Python 2 的脚本中(参见 Python 版本), 不会使用类型注释。

(参考 类型注释{:.external} 和 Google Python 风格指南进行比较。)

字符串

字符串优先使用双引号 (")。当使用单引号更具可读性时,声明时使用单引号。 例如,'猫说了 "喵"'"猫说\\"喵\\""更具可读性 。

(参考 字符串{:.external} 和 Google Python 风格指南进行比较。)

保持一致

在大范围内保持一致。 避免在 Fuchsia 中显示出小范围的一致性。 仅在单个文件或目录中保持一致并不是一致性。

在“第三方”中,目的是遵循该项目的现有风格或库。 根据需要在该库中查找样式指南。

(参考 分割词{:.external} 和 Google Python 风格指南进行比较。)