首页 > 编程问答 >Python 中的常量应该大写吗?

Python 中的常量应该大写吗?

时间:2024-07-24 10:41:10浏览次数:11  
标签:python

在 PEP8 中,一般规则是在 UPPER_CASE 字符中声明常量。在现实生活中,可能有多种情况:

#!env python

DATABASE_HOST = 'localhost'
app = Flask('myapp')
base_two = partial(int, base=2) 

通常我们将字符串类型或数字类型变量视为不可变的,因此是常量,而不是对象或函数。问题是 linter 无法进行类型检查。

您如何处理这种情况?我应该将它们大写还是只是在我的 linter 中禁用此规则?


这是一个很好的问题,即使有经验的 Python 程序员也会在如何应用 PEP 8 关于常量的指南方面犹豫不决。以下是分解方法:

PEP 8 说的是什么

PEP 8 指出“模块级常量”应该是大写的。但是,它对常量的定义相当模糊。一般来说,它指的是在你的代码库的生命周期中预计不会改变的值。

你的例子

让我们来看看你提供的例子:

  • DATABASE_HOST = 'localhost' : 这可能是一个常量,因为它不太可能经常改变。但是,如果你的数据库连接细节可能在不同的环境(如开发、测试、生产)中发生变化,那么它就不应该被视为常量。
  • app = Flask('myapp')' : 这不是一个常量。它是一个 Flask 应用程序的实例,并且在应用程序的生命周期中,它将被修改和与之交互。
  • base_two = partial(int, base=2) : 这更像是一个实用函数,而不是一个常量。虽然它本身并没有改变,但它并不代表一个固定的值。

实用主义的方针

与其严格地遵守规则,不如考虑常量的意图。常量的目的是为了表示在你的代码库中具有固定且全局意义的值。过度使用大写可能会使你的代码难以阅读,特别是对于不真正是常量的值。

以下是一些实用的建议:

  1. 真正不变的值 : 对于那些永远不会改变且具有全局意义的值使用大写(例如, PI = 3.14159 MAX_UPLOAD_SIZE = 1024 * 1024 )。
  2. 配置设置 : 对于像数据库凭据或 API 密钥这样的配置设置,考虑使用一个单独的配置文件或环境变量。这将它们与你的代码逻辑分开,并使其更容易管理不同的环境。
  3. 不要过分担心 : 如果一个值不完全符合常量的定义,但它感觉像是一个在你的特定上下文中不应该改变的值,那么使用你的判断力。代码的可读性和一致性比严格遵守规则更重要。

Linter 配置

你可以配置你的 linter 以忽略某些命名约定或为特定情况创建例外。但是,始终如一地应用规则很重要。如果你决定在你的代码库中偏离 PEP 8,请记录下来并保持一致。

总之 : 在 Python 中使用常量时,请优先考虑清晰度、一致性和实用主义,而不是盲目地遵守规则。

标签:python
From: 50794689

相关文章

  • 多重处理会导致 Python 崩溃,并给出一个错误:调用 fork() 时可能已在另一个线程中进行
    我对Python比较陌生,并试图为我的for循环实现一个多处理模块。我在img_urls中存储了一个图像url数组,我需要下载并应用一些Google视觉。if__name__=='__main__':img_urls=[ALL_MY_Image_URLS]runAll(img_urls)print("---%sseconds---"%(......
  • Python编程时输入操作数错误
    我正在用Python编写下面的代码来模拟控制系统。但是,当我调试代码时,我面临以下问题:matmul:输入操作数1没有足够的维度(有0,gufunc核心,签名为(n?,k),(k,m?)->(n?,m?)需要1)文件“D:\ÁreadeTrabalho\GitHub\TCC\CódigosMarcela\SistemaSISO_tres_estados_new.py”,......
  • Python入门知识点 7--散列类型与字符编码
    1、初识散列类型(无序序列)数据类型分为3种:   前面已经学过了两种类型   1.数值类型:int/float/bool只能存储单个数据      2.序列类型:str/list/tuple,有序的存储多个数据--有序类型,有下标,可以进行索引切片步长操作          3.散列类型......
  • Python入门知识点 6--序列类型的方法
    1、初识序列类型方法序列类型的概念:数据的集合,在序列类型里面可以存放任意的数据也可以对数据进行更方便的操作这个操作就是叫增删改查(crud)(增加(Creat),读取查询(Retrieve),更新(Update),删除(Delete)几个单词的首字母简写)增删改查是操作数据最底层的操作(从本质......
  • Python项目流程图
    我有一个由多个文件夹组成的Python项目,每个文件夹包含多个脚本。我正在寻找一个Python库或软件/包,它们可以生成流程图,说明这些脚本如何互连并绘制出从开始到结束的整个过程。自动生成Python项目流程图确实是一个挑战,目前没有完美通用的解决方案。主要原因是:......
  • 使用 mypy 时Python中的继承和多态性不起作用
    我正在寻找用mypy做一些标准的多态性,我以前从未使用过它,而且到目前为止它并不直观。基类classContentPullOptions:passclassTool(Protocol):asyncdefpull_content(self,opts:ContentPullOptions)->str|Dict[str,Any]:...子类classGoogle......
  • Python函数获取匹配和错误记录
    我有一个以下格式的json文件:[{"type":"BEGIN","id":"XYZ123"},{"type":"END","id":"XYZ123",},{"type":&......
  • python,替换标点符号但保持特殊单词完整的最佳方法
    我正在制作一个调制函数,它将采用带有特殊字符(@&*%)的关键字,并保持它们完整,同时从句子中删除所有其他标点符号。我设计了一个解决方案,但它非常庞大,而且可能比需要的更复杂。有没有一种方法可以以更简单的方式做到这一点。简而言之,我的代码匹配特殊单词的所有实例以查找跨度。然......
  • Python 检测 USB 设备 - IDLE 和 CMD 解释器之间的不同结果
    我正在尝试解决VDI解决方案中智能卡设备的USB重定向问题。我正在使用pyscard模块作为智能卡。对于进一步的上下文,主要问题是当浏览器插件调用用于处理智能卡的python脚本时,未检测到读卡器。关于问题,当我从CMD解释器运行此代码片段时,我收到空列表,表示系统上未找......
  • Python查找字符串的CRC32
    我尝试获取字符串数据类型变量的CRC32,但出现以下错误:>>>message='helloworld!'>>>importbinascii>>>binascii.crc32(message)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:aby......