sus*_*its 17 python coding-style
我正在编写一个应用程序,需要跨引擎找出数据库的模式.为此,我正在使用Python编写一个小型数据库适配器.我决定首先编写一个基类来概述我需要的功能,然后使用从这个基础继承的类来实现它.在此过程中,我需要实现一些需要在所有这些类中可访问的常量.其中一些常量需要使用C风格的按位OR组合.
我的问题是,
MAP_FIXED | MAP_FILE | MAP_SHARED是C允许的样式代码.对于前者,我遇到了线程,其中所有常量首先被放入模块中.对于后者,我简要地想到使用布尔词典.这两个似乎都太笨拙了.我想这是一个相当普遍的要求,并且认为必须确实存在一些好方法!
Fer*_*yer 17
分享这些常量的标准方法是什么?
在整个标准库中,最常用的方法是使用UPPER_CASE_WITH_UNDERSCORES名称将常量定义为模块级变量.
什么是创建可以组合的常量的正确方法?我指的是MAP_FIXED | MAP_FILE | C允许的MAP_SHARED样式代码.
适用与C相同的规则.您必须确保每个常量值对应一个唯一的位,即2的幂(2,4,8,16,...).
大多数时候,人们使用十六进制数字:
OPTION_A = 0x01
OPTION_B = 0x02
OPTION_C = 0x04
OPTION_D = 0x08
OPTION_E = 0x10
# ...
Run Code Online (Sandbox Code Playgroud)
有些人更喜欢更人性化的风格,使用移位运算符动态计算常量值:
OPTION_A = 1 << 0
OPTION_B = 1 << 1
OPTION_C = 1 << 2
# ...
Run Code Online (Sandbox Code Playgroud)
在Python中,您还可以使用二进制表示法使其更加明显:
OPTION_A = 0b00000001
OPTION_B = 0b00000010
OPTION_C = 0b00000100
OPTION_D = 0b00001000
Run Code Online (Sandbox Code Playgroud)
但由于这种表示法很冗长且难以阅读,因此使用十六进制或二进制移位表示法可能更可取.
您经常会在全局级别找到常量,它们是存在的少数变量之一。还有人使用字典或对象编写常量名称空间,如下所示
class Const:
x = 33
Const.x
Run Code Online (Sandbox Code Playgroud)
有些人将它们放入模块中,而另一些人将它们附加为实例访问的类变量。大多数时候这是个人喜好,但仅仅几个全局变量并不会真正造成那么大的伤害。