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

yipeiwu_com7年前Python基础

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实现简单的可逆加密程序。分享给大家供大家参考。具体如下: Python代码如下: 复制代码 代码如下:#coding=utf-8   ''...

python for循环输入一个矩阵的实例

代码如下: a=[] for i in range(3): a.append([]) for j in range(3): a[i].append(int(input(...

详谈Numpy中数组重塑、合并与拆分方法

1.数组重塑 1.1一维数组转变成二维数组 通过reshape( )函数即可实现,假设data是numpy.array类型的一维数组array([0, 1, 2, 3, 4, 5, 6,...

Django添加KindEditor富文本编辑器的使用

KindEditor简介: KindEditor是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用KindEditor 把传统的多行文本输入框...

python 不关闭控制台的实现方法

直接打开dos窗口,再执行python程序 在脚本的最后一行后面添加:raw_input()语句,这样直到按下回车键,窗口才关闭。 使用time模块的sleep函数,它有一个参数,传入数...