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中ConfigParse模块的用法
Sep 29 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
Python : turtle色彩控制实例详解
Jan 19 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
python 装饰器的基本使用
Jan 13 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 Python
python基础之类属性和实例属性
Oct 24 Python
PyTorch device与cuda.device用法
Apr 03 Python
python中validators库的使用方法详解
Sep 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 输出双引号"与单引号'的方法
2010/05/09 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
Vue3为什么这么快
2020/09/23 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
python单链表实现代码实例
2013/11/21 Python
python进阶教程之动态类型详解
2014/08/30 Python
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
初步理解Python进程的信号通讯
2015/04/09 Python
python实现线程池的方法
2015/06/30 Python
python正则中最短匹配实现代码
2018/01/16 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
python切割图片的示例
2020/11/12 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
高职助产应届生自荐信
2013/09/24 职场文书
中专生学习生活的自我评价分享
2013/10/27 职场文书
大气污染防治方案
2014/05/19 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
2016年元旦致辞
2015/08/01 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP