入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

创建时间:2017-12-27 投稿人: mmm 浏览次数:245

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

1 模块 or global

很多初学者有个误区,就是在Python中需要配置一个全局的参数时,首先想到的是global关键字,而实际上global不是干这个事的,global的功能是在将局部作用域的变量声明为全局的,这样可以在局部修改全局的变量。小编推荐大家加一下这个群:103456743这个群里好几千人了!大家遇到啥问题都会在里面交流!而且免费分享零基础入门料资料web开发 爬虫资料一整套!是个非常好的学习交流地方!也有程序员大神给大家热心解答各种问题!很快满员了。欲进从速哦!各种PDF等你来下载!全部都是免费的哦!只为帮助大家快速入门,所以小编在群里等你们过来一起交流学习呢!

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

通过模块配置全局变量的试例如下,在configs.py中定义CONFIG_A和CONFIG_B。在user.py中用import导入。

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

这个其实是Python中的基本操作了,本来是没啥好讲的,不过在这篇文章最后我展示了一种根据json配置的动态模块,供大家参考。

2 单例字典

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

我习惯采用第一种函数装饰器的写法:

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

如果需要返回一个单例类的话需要用元类的写法,或者第四种类装饰器的写法。当然,具体到这里而言,这个类是继承了一个MutableMapping的,不能再继承别的元类了,元类的写法在这里不适用。

3 单例字典的问题

用单例字典做全局配置看着比模块炫酷,其实并没那么好用。原因是单例模式自身的一个弊病,违背了单一职责原则,这个在 相关设计模式 的教程里有讲到。而且,字典在这一块还有个弊病就是根本不知道需要用到的key是不是存在字典中。

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

1、将各个类中该字典的引用点,由各个方法收拢到__init__方法。

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

2、将各个引用点的名称统一。

不应该

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

应该这样用

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

4、将单一的单例字典分成多个单例字典,并将部分单例字典转换成模块,这个就不举例了。

4 动态模块

模块的用法很简单,在一个文件里配置好,直接import就行。需要注意的是引用的入口最好在同一个地方。

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

详细的代码见 github ,主要用来动态修改模块的语句如下:

[setattr(module, k.decode("utf-8"), v) for k, v in d.items()]

其实就是通过setattr这个常用的给对象动态的添加功能的函数,d.tiems()是一个从json文件中读取的字典对象。

4 动态模块的优势

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

在单元测试中由于deepcopy的问题,根据导入的层级不一样,CONFIG_X的值也发生了不一样的改变,这是个还在研究的bug。

结束语

(新手必学)垃圾佬手把手教你魔改 Python全局配置规范

如有侵权,请联系小编删除

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像
mmm