coding-style - 在 Python 中创建常量的约定

标签 coding-style python

我正在编写一个需要跨引擎找出数据库模式的应用程序。为此,我正在使用 Python 编写一个小型数据库适配器。我决定首先编写一个概述我需要的功能的基类,然后使用从这个基类继承的类来实现它。在此过程中,我需要实现一些需要在所有这些类中都可以访问的常量。其中一些常量需要使用 C 风格的按位或组合。

我的问题是,

  1. 共享此类常量的标准方法是什么?
  2. 创建可组合常量的正确方法是什么?我指的是 MAP_FIXED | map 文件 | MAP_SHARED C 允许的样式代码。

对于前者,我遇到了所有常量首先被放入模块的线程。对于后者,我简单地想到了使用 bool 字典。这两个都显得太笨拙了。我想这是一个相当普遍的要求,并且认为确实存在一些好的方法!

最佳答案

what is the standard way of sharing such constants?

在整个标准库中,最常见的方法是使用 UPPER_CASE_WITH_UNDERSCORES 名称将常量定义为模块级变量。

what is the right way to create constants that can be combined? I am referring to MAP_FIXED | MAP_FILE | MAP_SHARED style code that C allows.

适用与 C 中相同的规则。您必须确保每个常量值对应于一个唯一的位,即 2 的幂(2、4、8、16、...)。

大多数时候,人们为此使用十六进制数:

OPTION_A = 0x01
OPTION_B = 0x02
OPTION_C = 0x04
OPTION_D = 0x08
OPTION_E = 0x10
# ...

有些人更喜欢更易读的风格,使用移位运算符动态计算常量值:

OPTION_A = 1 << 0
OPTION_B = 1 << 1
OPTION_C = 1 << 2
# ...

在 Python 中,您还可以使用二进制表示法使这一点更加明显:

OPTION_A = 0b00000001
OPTION_B = 0b00000010
OPTION_C = 0b00000100
OPTION_D = 0b00001000

但由于这种表示法冗长且难以阅读,因此使用十六进制或二进制移位表示法可能更可取。

关于coding-style - 在 Python 中创建常量的约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078731/

相关文章:

regex - 在 Haskell 中存储正则表达式字符串的最佳方法是什么?

python - 如何从列表 Python 创建类实例

python - Visual Code Studio 中类似 PyCharm 的控制台

python - 为什么在父类中改变 'x'的值只会改变一个子类的值?

python - 使用 Big Pandas DataFrame 的列值创建 Mini/Sub 数据框

python - 使用 GPU 与 CPU 计算损失的 tensorflow

java - eclipse : Crap4j and other intelligent code quality analyzers

python - 如果 Python 中的约定是大写类,那么为什么 list() 不大写?不是一个类吗?

c++ - 设计 C++ 休息客户端

c# - 编码指南+最佳实践?