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实现定时播放mp3
Mar 29 Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python实现excel转sqlite的方法
Jul 17 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 Python
python实现自动登录
Sep 17 Python
对Python使用mfcc的两种方式详解
Jan 09 Python
python中的句柄操作的方法示例
Jun 20 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
Python爬虫制作翻译程序的示例代码
Feb 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
使用Apache的rewrite技术
2006/06/22 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
javascript如何写热点图
2015/12/08 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
keras导入weights方式
2020/06/12 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
数组越界问题
2015/10/21 面试题
公务员转正鉴定材料
2014/02/11 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书