Python中规范定义命名空间的一些建议

作者:mattkang 时间:2022-05-16 17:05:24 

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而已,不需要暴 * 和c。
这时__all__=[a]
在其它模块from xxxmodule import *的时候就只import了a了。
而且在开发者阅读源码的时候,看到了__all__,一下子就知道要暴露的是哪些方法,而不是一堆代码无从下手。

3.在使用了这个变量后删掉
通过del xxx删掉。
这样在dir(xxxmodule)的时候就减少了dir出来满屏的变量了。
同样在decimal的源码,可以看到使用了正则表达式模块re之后,用del re删掉了。
还有一种方法就是把import语句放在函数内,将其限制在局部作用域中。感觉这种方法不pythonic,就不推荐了。

标签:Python,命名空间
0
投稿

猜你喜欢

  • PHP封装的数据库模型Model类完整示例【基于PDO】

    2023-11-15 21:06:42
  • 使用JScript遍历Request表单参数集合

    2011-02-26 11:08:00
  • GOLANG版的冒泡排序和快速排序分享

    2023-07-05 05:31:09
  • 在oracle 数据库查询的select 查询字段中关联其他表的方法

    2009-08-31 12:27:00
  • Python中seaborn库之countplot的数据可视化使用

    2023-08-10 20:38:56
  • CSS pointer-events下层元素被点击

    2010-04-11 22:31:00
  • Python xpath表达式如何实现数据处理

    2021-09-02 22:07:15
  • 基于OpenCv实现的人脸识别(附Python完整代码)

    2022-08-10 21:49:27
  • asp如何向客户端发送提示“出错信息”?

    2010-06-09 18:50:00
  • Python实现微博动态图片爬取详解

    2023-09-14 05:47:25
  • IE下修改<p>标签的innerHTML出错

    2007-11-11 10:12:00
  • Oracle如何直接运行OS命令(下)第1/2页

    2010-07-30 13:26:00
  • 如何获得上一个月份是几月?

    2009-11-23 20:38:00
  • django缓存配置的几种方法详解

    2022-08-29 02:37:16
  • python语言元素知识点详解

    2023-07-30 03:33:08
  • Asp Oracle存储过程返回结果集的代码

    2011-04-10 11:16:00
  • 将一个图片以二进制值的形式存入Xml文件中

    2008-09-04 11:24:00
  • SWFObject1.5: 基于Javascript的Flash媒体版本检测与嵌入模块

    2009-08-06 18:02:00
  • Python3.9.1中使用match方法详解

    2023-09-14 09:51:21
  • Python判断变量是否已经定义的方法

    2023-08-01 07:14:01
  • asp之家 网络编程 m.aspxhome.com