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线程的两种编程方式
Apr 14 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
详解python之配置日志的几种方式
May 22 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
Python切片工具pillow用法示例
Mar 30 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
python实现飞机大战小游戏
Nov 08 Python
Python %r和%s区别代码实例解析
Apr 03 Python
python如何随机生成高强度密码
Aug 19 Python
手残删除python之后的补救方法
Jun 26 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中的登陆login
2007/01/18 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
Python3字符串学习教程
2015/08/20 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
sublime text 3配置使用python操作方法
2017/06/11 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
do you have any Best Practice for testing
2016/06/04 面试题
优秀教师事迹简介
2014/02/02 职场文书
企业形象策划方案
2014/05/29 职场文书
党员演讲稿
2014/09/04 职场文书
2015年班组工作总结
2015/04/20 职场文书
警示教育片观后感
2015/06/17 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS
springboot用户数据修改的详细实现
2022/04/06 Java/Android