【发布时间】:2011-08-14 00:07:04
【问题描述】:
我想导入一个模块,但是根据我想要施加的一些外部条件,导入的行为可能会有所不同。有哪些策略可以实现这一结果?
例子。我想要一个模块 foo.py。如果我import foo 我会打印“你好”或“再见”,这取决于一些独立于模块的外部条件,而是依赖于外部因素。一个微不足道的可能是一个全局变量,但我不认为 python 范围规则允许我从模块 foo 之外获取全局变量。
例子:
fop.py
import __main__
try:
__main__.bar
present = True
except:
present = False
if present:
print "present"
else:
print "not present"
现在,当我导入模块时,我可以获得不同的结果
Python 2.7.1 (r271:86832, Feb 27 2011, 20:04:04)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import foo
not present
>>>
Python 2.7.1 (r271:86832, Feb 27 2011, 20:04:04)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> bar = 5
>>> import foo
present
我知道这很奇怪,但我有一个非常、非常、非常好的理由这样做。
【问题讨论】:
-
听起来像没有人能理解的代码......
-
塞巴斯蒂安:这正是我想要实现的目标
-
你能举一个用例的例子吗?比如外部条件的例子,什么是“行为不同”?
-
啊,好吧,在这种情况下,您应该检查一下 twisted.internet.reactor,这对我来说似乎是个好方法。
-
你可以通过 import hooks 调用各种东西:python.org/dev/peps/pep-0302
标签: python