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.
```python {.bad}
No:
a = "Hello" # Ambiguous (depends on Python version).
b = str(foo) # Convert to ascii.
c = chr(c) # Convert to ascii.
d = open("bar.txt").read() # Read text as ascii.
改进
我们对 Google Python 风格指南所做的以下改进主要是对变体之间的选择。 例如,如果风格指南说你可以做 A,B 或 C 我们可以选择偏爱 B 并避免其他选择。
缩进
避免与起始的分隔符对齐。偏好为使用固定缩进(4个空格)。
(参考 缩进{:.external} 和 Google Python 风格指南进行比较。)
声明
避免创建单行语句,即使使用 if
语句。
```python {.good} Yes:
if foo:
bar(foo)
```python {.bad}
No:
if foo: bar(foo)
(参考 声明{:.external} 和 Google Python 风格指南进行比较。)
类型注释
在支持 Python 2 的脚本中(参见 Python 版本), 不会使用类型注释。
(参考 类型注释{:.external} 和 Google Python 风格指南进行比较。)
字符串
字符串优先使用双引号 ("
)。当使用单引号更具可读性时,声明时使用单引号。 例如,'猫说了 "喵"'
比"猫说\\"喵\\""
更具可读性
。
(参考 字符串{:.external} 和 Google Python 风格指南进行比较。)
保持一致
在大范围内保持一致。 避免在 Fuchsia 中显示出小范围的一致性。 仅在单个文件或目录中保持一致并不是一致性。
在“第三方”中,目的是遵循该项目的现有风格或库。 根据需要在该库中查找样式指南。
(参考 分割词{:.external} 和 Google Python 风格指南进行比较。)