我喜欢小型,自包含的模块,有时包含单个类或单个函数,例如
def decorator(function):
return function
按照惯例,我只使用完整的绝对导入,例如
# Yes
import module
module.function()
# No
from module import function
function()
总之,这可能会变得令人烦恼,例如。
import decorator
@decorator.decorator
def function():
pass
所以我喜欢通过sys.modules
导出模块以外的东西,例如
import sys
def decorator(function):
return function
sys.modules[__name__] = decorator
然后,
import decorator
@decorator
def function():
pass
这是介绍;我是否应该这样做不是问题。问题是这种奇怪的行为:
# foo.py
import sys
x = 1
def foo():
print(x)
sys.modules[__name__] = foo
然后,
>>> import foo
>>> foo()
None
还有陌生人,这只发生在Python 2.7中;在Python 3.4中它按预期工作!我的问题是,为什么会发生这种情况,我怎样才能在Python 2.7中使用它?
感谢。