设为首页收藏本站
查看: 82|回复: 0

[PHP] Python中规范定义命名空间

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34273
主题
17031
UID
1347
M币
67
贡献
17175

  • 发表于 2017-5-14 02:44:00 | 显示全部楼层 |阅读模式
    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中规范定义命名空间相关文章请关注PHP中文网!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表