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求两个list的差集、交集与并集的方法
Nov 01 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
Python实现快速计算词频功能示例
Jun 25 Python
python自动化生成IOS的图标
Nov 13 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
Apr 15 Python
python3中property使用方法详解
Apr 23 Python
基于Python实现签到脚本过程解析
Oct 25 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
Python startswith()和endswith() 方法原理解析
Apr 28 Python
Python中格式化字符串的四种实现
May 26 Python
Python读取Excel数据并生成图表过程解析
Jun 18 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
php中计算时间差的几种方法
2009/12/31 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
PHP常用的小程序代码段
2015/11/14 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
javascript操作cookie
2017/01/17 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
Python内建模块struct实例详解
2018/02/02 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
人力资源部培训专员岗位职责
2014/01/02 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
金陵十三钗观后感
2015/06/04 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS