【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’

你可能感兴趣的:(python,开发语言,数据库)