我有一些看起来像这样的代码:
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.
。
答案 0 :(得分:11)
控制命名空间污染的常用方法是
这些技术都是标准库中的核心开发人员使用的。例如, decimal 模块:
从private name imports开始,例如import math as _math
等。
稍后,使用del sys, MockThreading
设置线程环境后跟variable deletion确实有效。
此外,它defines an __all__ variable以明确公共API是什么。
总而言之,这些技术使命名空间像吹口哨一样干净。
答案 1 :(得分:7)
一种简单的方法是使用函数范围来控制文件中的导入可见性:
def prepare_parser():
from pyparsing import Word, alphas, Optional, ...
# do stuff, and get the final thing to return
return ...
parser = prepare_parser()