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对数组进行反转的方法
May 20 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
浅析PHP与Python进行数据交互
May 15 Python
python opencv读mp4视频的实例
Dec 07 Python
Django 日志配置按日期滚动的方法
Jan 31 Python
Python中一些深不见底的“坑”
Jun 12 Python
python数据类型之间怎么转换技巧分享
Aug 20 Python
python多线程分块读取文件
Aug 29 Python
python实现超级马里奥
Mar 18 Python
python爬虫容易学吗
Jun 02 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 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 购物车实例(申精)
2009/05/11 PHP
PHP 超链接 抓取实现代码
2009/06/29 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
javascript 写类方式之一
2009/07/05 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
JSON格式化输出
2014/11/10 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
Python中转换角度为弧度的radians()方法
2015/05/18 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript