赞
踩
0x01 模块 or global
很多初学者有个误区,就是在Python中需要配置一个全局的参数时,首先想到的是global关键字,而实际上global不是干这个事的,global的功能是在将局部作用域的变量声明为全局的,这样可以在局部修改全局的变量。
但这种用法其实非常不好,按照函数式的规范而言,纯函数的输入应该只由输入参数确定,不应该在执行过程中引用外部变量。并且,global也不是用来进行全局配置用的。
在Python中,模块是天然的单例,模块会在项目初始化后执行一次,之后一般不重复执行,符合单例模式的特点。因此,利用模块的这一特性,将整个工程文件中需要配置的选项都配置到一个模块中,在需要用的模块中通过import导入,才是Python中全局配置正确打开方式。
虽然这种规范已经在江苟(Django)等开源框架中展示了无数遍,但“如何在Python中设置全局变量”这个问题仍然是Python社区的月经贴。
通过模块配置全局变量的试例如下,在configs.py中定义CONFIG_A和CONFIG_B。在user.py中用import导入。
这个其实是Python中的基本操作了,本来是没啥好讲的,不过在这篇文章最后我展示了一种根据json配置的动态模块,供大家参考。
0x02 单例字典
在讲模块之前,我想谈谈我尝试过另一种方式,就是自定义单例字典,具体做法是这样的。
先继承collections模块中MutableMapping,并重写相关接口。这是在Python中自定义数据类型的基本操作了,自
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。