Python中规范定义命名空间的一些建议


Posted in Python onJune 04, 2016

API的设计是一个艺术活。往往需要其简单、易懂、整洁、不累赘。
很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的。
也就是说我们只需要暴露这个方法就行,不用关心这个方法是怎么实现的,不用关心其它辅助方法的存在。
在Python中,有几种策略来保持命名空间的整洁。

1.变量命名用下划线_开头
下划线_开头的变量在其它模块from xxx import *的时候不被import。
如果你看decimal的源码,就会发现多次把import 的模块弄成下划线_开头的别名。
http://hg.python.org/cpython/file/2.7/Lib/decimal.py
比如

import copy as _copy
import math as _math
import numbers as _numbers

这不是蛋疼,是为了不污染命名空间

2.定义__all__
python的魔术方法实在是灵活。
假设我模块中有3个方法a(),b(),c()
我只是要暴露a而已,不需要暴露b和c。
这时__all__=[a]
在其它模块from xxxmodule import *的时候就只import了a了。
而且在开发者阅读源码的时候,看到了__all__,一下子就知道要暴露的是哪些方法,而不是一堆代码无从下手。

3.在使用了这个变量后删掉
通过del xxx删掉。
这样在dir(xxxmodule)的时候就减少了dir出来满屏的变量了。
同样在decimal的源码,可以看到使用了正则表达式模块re之后,用del re删掉了。
还有一种方法就是把import语句放在函数内,将其限制在局部作用域中。感觉这种方法不pythonic,就不推荐了。

Python 相关文章推荐
Python浅拷贝与深拷贝用法实例
May 09 Python
Python中用于计算对数的log()方法
May 15 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
Apr 10 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
Python button选取本地图片并显示的实例
Jun 13 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
python构造函数init实例方法解析
Jan 19 Python
django日志默认打印request请求信息的方法示例
May 17 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
如何在mac下配置python虚拟环境
Jul 06 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
全面理解Python中self的用法
Jun 04 #Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 #Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 #Python
Python中import导入上一级目录模块及循环import问题的解决
Jun 04 #Python
Python输出汉字字库及将文字转换为图片的方法
Jun 04 #Python
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 #Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 #Python
You might like
MySQL相关说明
2007/01/15 PHP
PHP学习 变量使用总结
2011/03/24 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
IE php关于强制下载文件的代码
2008/08/23 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
python多线程方式执行多个bat代码
2016/06/07 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
Python subprocess模块详细解读
2018/01/29 Python
python实现数据分析与建模
2019/07/11 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Python3 元组tuple入门基础
2020/02/09 Python
婚礼司仪主持词
2014/03/14 职场文书
任命书模板
2014/06/04 职场文书
2015年暑期见闻
2015/07/14 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP