限制Python导入的范围

时间:2012-04-28 04:00:25

标签: python namespaces

我有一些看起来像这样的代码:

from pyparsing import Word, alphas, Optional, ...
# Do stuff ...
# And at the end, save a result to the outside world.
parser = ...

# Now use parser but don't use anything else from pyparsing again.

我喜欢调用from <package> import <etc>的方便,但我只想让它用在很小的代码段中。我担心我会对命名空间污染做出贡献,因为我在同一个文件中有很多像这样的小片段。

处理这种情况的Pythonic方法是什么?我仍然只是在玩它,所以我宁愿不写这么多次来重写pyparsing.

2 个答案:

答案 0 :(得分:11)

控制命名空间污染的常用方法是

  1. 使用后删除变量
  2. 使用__all__变量
  3. 使用import-as强调变量名称
  4. 这些技术都是标准库中的核心开发人员使用的。例如, decimal 模块:

    总而言之,这些技术使命名空间像吹口哨一样干净。

答案 1 :(得分:7)

一种简单的方法是使用函数范围来控制文件中的导入可见性:

def prepare_parser():
    from pyparsing import Word, alphas, Optional, ...
    # do stuff, and get the final thing to return
    return ...

parser = prepare_parser()