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中文乱码的解决方法
Nov 04 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
在Python中使用mechanize模块模拟浏览器功能
May 05 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
Python装饰器知识点补充
May 28 Python
Python列表与元组的异同详解
Jul 02 Python
Python 进程之间共享数据(全局变量)的方法
Jul 16 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
python图片二值化提高识别率代码实例
Aug 24 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
Python可以用来做什么
Nov 23 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
PHP下MAIL的另一解决方案
2006/10/09 PHP
PHP与SQL注入攻击[三]
2007/04/17 PHP
10条PHP编程习惯助你找工作
2008/09/29 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
详解Python迭代和迭代器
2016/03/28 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
python邮件发送smtplib使用详解
2020/06/16 Python
Python类的继承用法示例
2019/01/31 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
如何用SQL语句进行模糊查找
2015/09/25 面试题
启动仪式策划方案
2014/06/14 职场文书
高三语文复习计划
2015/01/19 职场文书
英语复习计划
2015/01/19 职场文书
小石潭记导游词
2015/02/03 职场文书
2016年小学中秋节活动总结
2016/04/05 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL