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基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
Python格式化输出%s和%d
May 07 Python
Python之list对应元素求和的方法
Jun 28 Python
django模板加载静态文件的方法步骤
Mar 01 Python
Python 学习教程之networkx
Apr 15 Python
python中 * 的用法详解
Jul 10 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
python读取文件指定行内容实例讲解
Mar 02 Python
python 实现aes256加密
Nov 27 Python
Python 可视化神器Plotly详解
Dec 26 Python
python tqdm用法及实例详解
Jun 16 Python
关于的python五子棋的算法
May 02 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
基于文本的访客签到簿
2006/10/09 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
React diff算法的实现示例
2018/04/20 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
node express使用HTML模板的方法示例
2019/08/22 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
用python制作游戏外挂
2018/01/04 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
初中军训感想
2015/08/07 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
节约用水广告语60条
2019/11/14 职场文书
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS