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中的random()方法的使用介绍
May 15 Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
python中的字典操作及字典函数
Jan 03 Python
python实现梯度下降算法
Mar 24 Python
python读写csv文件方法详细总结
Jul 05 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
Django配置文件代码说明
Dec 04 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 Python
Django 5种类型Session使用方法解析
Apr 29 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 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
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php表单提交实例讲解
2015/11/12 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
javascript 闭包详解
2015/07/02 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
微信小程序轮播图swiper代码详解
2020/12/01 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
Python import与from import使用及区别介绍
2018/09/06 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
python安装gdal的两种方法
2019/10/29 Python
python自动识别文本编码格式代码
2019/12/26 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
python如何写出表白程序
2020/06/01 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
医药营销个人求职信
2014/04/12 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
打架检讨书范文
2015/01/27 职场文书
消防隐患整改通知书
2015/04/22 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL