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调用cmd命令行制作刷博器
Jan 13 Python
python采用django框架实现支付宝即时到帐接口
May 17 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
python实现感知器
Dec 19 Python
对python中使用requests模块参数编码的不同处理方法
May 18 Python
python进阶之多线程对同一个全局变量的处理方法
Nov 09 Python
详解用Python练习画个美队盾牌
Mar 23 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
Pandas之缺失数据的实现
Jan 06 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
str_replace只替换一次字符串的方法
2013/04/09 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
php中session使用示例
2014/03/29 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
javascript中的new使用
2010/03/20 Javascript
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
用python3教你任意Html主内容提取功能
2018/11/05 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
pytorch之添加BN的实现
2020/01/06 Python
python中的yield from语法快速学习
2020/11/06 Python
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
报关员个人职业生涯规划书
2014/03/12 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
运动会宣传稿100字
2015/07/23 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
如何理解PHP核心特性命名空间
2021/05/28 PHP
golang 实用库gotable的具体使用
2021/07/01 Golang
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers