常量是不变的变量,在Python中,常量通常用大写的变量名表示。但事实上,Python并没有严格的常量概念。python有内置的常量,而且只有6个,分别是True、False、None、NotImplemented、Ellipsis、__debug__。在Python中并没有直接的方法或命令去声明一个全局常量。甚至python中就没有关于全局常量数据类型的定义。本文地址:http://www.04007.cn/article/1180.html,未经许可,不得转载.
Python对变量关键词的查找顺序为:局部命名空间 -> 全局命名空间 -> 内置命名空间。找不到变量名,它将会放弃查找并引发一个 NameError 异常。其中本文地址:http://www.04007.cn/article/1180.html,未经许可,不得转载.
内置名称(built-in names)是Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。全局名称(global names)是模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
局部名称(local names)是函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)本文地址:http://www.04007.cn/article/1180.html,未经许可,不得转载.
可见全局名称在Python里就是模块中定义的名称,定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。而此处的全局作用域也只是一个模块内部而已。因此要实现整个框架的全局常量,可以有两种办法来实现。一是直接在内置作用域中去定义,二是建立一个常量值模块,所以需要使用常量的地方都导入这个模块并进行取值和设置值的操作,以此来模拟实现全局常量的功能。所以下文中的全局常量其实是一个全局跨文件跨模块的全局变量。本文地址:http://www.04007.cn/article/1180.html,未经许可,不得转载.
内置作用域是通过一个名为builtin的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:
import builtins
print(dir(builtins))本文地址:http://www.04007.cn/article/1180.html,未经许可,不得转载.
不过内置变量没有找到对它进行修改新增的办法,对于建立一个常量值模块,可以使用已有的比如sys模块,也可以自建一个模块。本文地址:http://www.04007.cn/article/1180.html,未经许可,不得转载.
使用sys模块的实现如下:本文地址:http://www.04007.cn/article/1180.html,未经许可,不得转载.
# 显示所有sys模块下的值 import sys print(sys.modules.keys()) # 设置一个自定义的常量数据池 sys.modules['const_vals']={'ip':'192.12.12.12'} print(sys.modules.keys()) # 在全局都可以直接调用了 print(sys.modules['const_vals'])
使用自定义的一个模块来实现常量值模块的方法如下:可以建立一个const.py里面定义一个Const类,内容如下:本文地址:http://www.04007.cn/article/1180.html,未经许可,不得转载.
_global_dict = {} class Const: @staticmethod def _init(): #初始化一个全局的字典 global _global_dict @staticmethod def set_value(key,value): _global_dict[key] = value def get_value(key,value): try: return _global_dict[key] except KeyError as e: print(e)在其它需要使用全局常量的地方引入这个模块进行存值、取值操作。本文地址:http://www.04007.cn/article/1180.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/1180.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |