【Python】Python 常量定义

Python 常量定义

Python中存在常量吗?相信很多人的答案是否定的。 实际上Pythrni的内建命名空间是 支持一小部分常量的, 如我们熟悉的True、False、None等,只是Python没有提供定义常量 的直接方式而已。

那么,在Python中应该如何使用常量呢? 一般来说有以下两种方式:

通过命名风格来提醒使用者该变量代表的意义为常M.如常量名所有字母大写,用下 划线连接各个单同,如 MAX_OVERFLOW 、 TOTAL。 然而这种方式并没有实现真正 的常量,其对应的值仍然可以改变,这只是一种约定俗成的风格。

通过自定义的类实现常量功能。这要求符合“命名全部为大写”和“值一旦绑定便不 可再修改”这两个条件。 下面是一种较为常见的解决方法,它通过对常量对应的值进 行修改时或者命名不符合规范时抛出异常来满足以上常量的两个条件。

class _const:
class ConstError(TypeError): pass
class ConstCaseError(ConstError): pass
def setattr(self, name, value):
if self.diet.has_key(name):
raise self.ConstError( “Can’t change const.%s” % name )
if not name.isupper():
raise self.ConstCaseErrorf( " const name ‘%s’ is not all uppercase" % name)
self.diet[name]= value
import sys
sys.modules[name]=_const()
如果上面的代码对应的模块名为 const ,使用的时候只需要 import const , 便可以直接定义常量了,如以下代码:

import const

const.COMPANY = “IBM”

上面的代码中常量一旦赋值便不可再更改.因此const.COMPANY = “S AP”会拋出 const.ConstError:异常,而常量名称如果小写,如const.name = ’’Python”,也会拋出const. ConstCaseError 异常。

无论采用哪一种方式来实现常量,都提倡将常董集中到一个文件中,因为这样有利于维 护,一旦需要修改常量的值,可以集中统一进行而不是逐个文件去检查。采用第二种方式实 现的常最可以这么做:将存放常设的文件命名为constam,py,并在其中定义一系列常量。

class _const:
class ConstError(TypeError): pass
class ConstCaseError(ConstError): pass
def setattr(self, name, value):
if self.diet.has_key(name):
raise self.ConstError( “Can’t change const.%s” % name )
if not name.isupper():
raise self.ConstCaseErrorf( " const name ‘%s’ is not all uppercase" % name)
self.diet[name]= value
import sys
sys.modules[name]=_const()
sys.modules.get(‘const’)
import const
const.MY_CONSTANT =1
const.MY_SECOND_CONSTANT = 2
const.MY_THIRD_CONSTANT = ‘a’
const.MY_FORTH_CONSTANT = ‘b’


ModuleNotFoundError Traceback (most recent call last)

in
10 import sys
11 sys.modules[name]=_const()
—> 12 import _const as const
13 const.MY_CONSTANT =1
14 const.MY_SECOND_CONSTANT = 2

ModuleNotFoundError: No module named ‘_const’
当在其他模块中引用这些常量时,按照如下方式进行即可:

from constant import const print const.MY_SECOND_CONSTANT print const.MY_THIRD_C ONS TANT * 2 print const.MY_FORTH_CONSTANT+‘5’

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/58247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大集合拆分成多个小集合

文章目录 1. 场景2. 拆分集合方法(写了三种)3. 格式化打印方法 1. 场景 在数据库批量操作时,有可能数据量过大,不能一次性操作,所以需要将大集合拆分为多个小集合进行多次操作 2. 拆分集合方法(写了三种&…

Linux通过libudev获取挂载路径、监控U盘热拔插事件、U盘文件系统类型

文章目录 获取挂载路径监控U盘热拔插事件libusb 文件系统类型通过挂载点获取挂载路径添libudev加库 获取挂载路径 #include <stdio.h> #include <libudev.h> #include <string.h>int main() {struct udev *udev;struct udev_enumerate *enumerate;struct ud…

Android Activity启动过程一:从Intent到Activity创建

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、概览二、应用内启动源码流程 (startActivity)2.1 startActivit…

curl通过webdav操作alist

创建目录: url202320230828;curl -v -u "admin":"这里是密码" -X MKCOL "http://127.0.0.1:5244/dav/my189tianyi/${url2023}/" 上传文件: curl -v -u "admin":"这里是密码" -T /tmp/aa.json "http://127.0.0.1:52…

Win10上ffmpeg出现Invalid report file level

在win10上经常使用ffmpeg&#xff0c;但是最近突然ffmpeg用不了&#xff0c;不管ffmpeg还是ffplay&#xff0c;输出始终一句话&#xff1a; Invalid report file level 重新通过scoop装了以后还是同样的错误。 后来发现是一个环境变量设置有问题&#xff0c;FFREPORT。 我在w…

flink on yarn with kerberos 边缘提交

flink on yarn 带kerberos 远程提交 实现 flink kerberos 配置 先使用ugi进行一次认证正常提交 import com.google.common.io.Files; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.flink.client.cli.CliFrontend; import o…

网工内推 | IT网工,华为、华三认证优先,15k*13薪

01 广东善能科技发展股份有限公司 招聘岗位&#xff1a;IT网络工程师 职责描述&#xff1a; 1、负责公司项目售后技术支持工作&#xff1b; 2、负责项目交付实施&#xff0c;配置调试、运维等&#xff1b; 3、参加合作厂商产品技术知识培训&#xff1b; 4、参加合作厂商工程师…

pdf怎么删除其中一页?

pdf怎么删除其中一页&#xff1f;现在&#xff0c;pdf文件已经深入影响着我们的工作和学习&#xff0c;如果你是一个上班族&#xff0c;那么几乎每天都会使用到pdf格式的电脑文件。当我们阅读一个页数众多的PDF文件时&#xff0c;可能会发现实际上只需要其中的一小部分内容。很…

【golang】go语句执行规则(goroutine)(上)

Don’t communicate by sharing memory;share memory by communicating. 从Go语言编程的角度解释&#xff0c;这句话的意思就是&#xff1a;不要通过共享数据来通讯&#xff0c;恰恰相反&#xff0c;要以通讯的方式共享数据。 进程和线程 进程&#xff0c;描述的就是程序的执…

Oracle工具之SQLLDR

1. 什么是SQLLDR SQLLDR是Oracle服务端自带的工具&#xff0c;用于快速导入大批量数据。 2. 常规路径加载/直接路径加载 sqlldr导入有两种模式&#xff0c;常规路径加载和直接路径加载&#xff0c;默认使用常规路径加载&#xff0c;当directy或者directtrue时&#xff0c;使用…

QT初始学习中的个人基础认知

整体感觉 安装的时候感觉更像python的库安装和编译器版本的配合安装。进入创建工程时&#xff0c;感觉是c语言的创建工程的感觉&#xff0c;而且可以看到main和h的头文件&#xff0c;整体来看是C来编写的程序。完成整个工程个人感觉是C编写功能&#xff0c;使用VB实现界面设计…

java八股文面试[多线程]——两个线程交替打印1-100之间的数字

一份代码&#xff0c;两个线程&#xff0c;使用synchronize实现&#xff1a; 重写run()方法&#xff0c;将输出1到100之间整数的代码写到同步方法里。线程1进入到同步方法&#xff0c;输出一个整数后&#xff0c;阻塞并释放锁。线程2进入到同步方法&#xff0c;唤醒线程1&…

Python常用内置函数

Python 提供丰富了内置函数&#xff0c;这些函数的使用频率非常用&#xff0c;在编程过程中熟练使用内置函数可以大大减少我们的代码逻辑和代码量。 Python 解释器内置了很多函数和类型&#xff0c;任何时候都能使用。这些内置函数直接使用&#xff0c;是不需要导入库的。 内…

Java 体系性能优化工具

Java 体系性能优化 目录概述需求&#xff1a; 设计思路实现思路分析1.oom 异常来说&#xff1a;2.visualvm3.Arthas4.JProfiler &#xff08;全面&#xff09;5.jmeter 特有 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect…

Nodejs快速搭建简单的HTTP服务器,并发布公网远程访问

前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff08;原为 Node.js Foundation&#xff0c;已与 JS Foundation 合并&#xff09;持有和维护&#xff0c;亦为 Linux 基金会的项目。Node.js 采用 Google 开发…

PHP教学资源管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 教学资源管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88260480 论文 https://downl…

JVM介绍

一、介绍 1. JVM是什么 JVM是Java Virtual Machine的缩写&#xff0c;即咱们经常提到的Java虚拟机。虚拟机是一种抽象化的计算机&#xff0c;有着自己完善的硬件架构&#xff0c;如处理器、堆栈等&#xff0c;具体有什么咱们不做了解。目前我们只需要知道想要运行Java文件&…

Vue3 学习

基础 js:https://www.bilibili.com/video/BV15T411j7pJ/?spm_id_from333.337.search-card.all.click&vd_source9747207be61edfe4ec62226fc79b3589 官方文档&#xff1a; https://cn.vuejs.org/ 版本之间差异在关于---》版本发布 https://cn.vuejs.org/about/release…

【计算机网络】序列化与反序列化

文章目录 1. 如何处理结构化数据&#xff1f;序列化 与 反序列化 2. 实现网络版计算器1. Tcp 套接字的封装——sock.hpp创建套接字——Socket绑定——Bind将套接字设置为监听状态——Listen获取连接——Accept发起连接——Connect 2. 服务器的实现 ——TcpServer.hpp初始化启动…

Spark 7:Spark SQL 函数定义

SparkSQL 定义UDF函数 方式1语法&#xff1a; udf对象 sparksession.udf.register(参数1&#xff0c;参数2&#xff0c;参数3&#xff09; 参数1&#xff1a;UDF名称&#xff0c;可用于SQL风格 参数2&#xff1a;被注册成UDF的方法名 参数3&#xff1a;声明UDF的返回值类型 ud…